**首先扯点别的:**最近新租了一间房子,二楼向阳,有一个向阳的大窗户,350块一个月,总体来说不是很满意,以前租的是一个一楼的,没有阳光,挺冷的,但是用水啥的都挺方便,搬到这个二楼的房间用水相当不方便。失去了,才怀念。。。
##ViewPager 使用PagerAdapter
首先定义一个MyPagerAdapter继承自PagerAdapter
public class MyPagerAdapter extends PagerAdapter {
private Context context;
private List<String> imageList;
public MyPagerAdapter(Context context, List<String> imageList) {
this.context = context;
this.imageList = imageList;
}
@Override
public int getCount() {
return imageList.size();
}
/**
* 在给定的position的位置上创建一个页面,并把这个页面加入到container中。
*
* @param container The containing View in which the page will be shown.这里就是ViewPager了
* @param position 要被初始化的页面的位置
* @return 返回一个代表新页面的Object,通常就直接用页面本身代表即可,所以我们返回view。
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//每一页仅仅展示一张图片
View view = LayoutInflater.from(context).inflate(R.layout.item_mypageradapter, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.img_main);
Glide.with(context).load(imageList.get(position)).into(imageView);
//这行代码别漏了
container.addView(view);
return view;
}
/**
* 用来确定instantiateItem(ViewGroup, int)方法中返回的Object是否和一个 页面联系起来了
* 这个方法用来确保PagerAdapter能正常工作
*
* @param view Page View to check for association with object
* @param object Object to check for association with view
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* 删除指定位置上的页面,并从container中移除
*
* @param container The containing View from which the page will be removed.这里就是ViewPager
* @param position The page position to be removed.
* @param object The same object that was returned by {@link #instantiateItem(View, int)}.
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
在代码中使用
public class ViewPagerPagerAdapterActivity extends AppCompatActivity {
@BindView(R.id.view_pager)
ViewPager viewPager;
private List<String> imageList;
private MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_pager_adapter);
ButterKnife.bind(this);
imageList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
//添加图片地址
imageList.add(Images.imageUrls[i]);
}
adapter = new MyPagerAdapter(this, imageList);
viewPager.setAdapter(adapter);
}
}
##如何删除ViewPager中的Fragment
Fragment1:注意是android.support.v4.app.Fragment
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
public class Fragment1 extends Fragment {
private final String image_path =Images.imageUrls[0];
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.f1, null);
TextView textView = (TextView) view.findViewById(R.id.f1textview);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getActivity(), "ok", Toast.LENGTH_LONG).show();
}
});
return view;
}
}
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/f1textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment1"/>
</LinearLayout>
其他的几个Fragment就不贴代码了,都是一样的,就是TextView的文字不一样
Activity文件
public class MainActivity extends AppCompatActivity {
public int currentType = 0;// 指示当前是哪个界面
@BindView(R.id.pager)
ViewPager viewPager;
@BindView(R.id.btnRemove)
Button btnRemove;
private MyFragmentPagerAdapter adapter;
private List<Fragment> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_pager_adapter);
ButterKnife.bind(this);
initViews();
}
private void initViews() {
list.add(new Fragment1());
list.add(new Fragment2());
list.add(new Fragment3());
list.add(new Fragment4());
btnRemove = (Button) findViewById(R.id.btnRemove);
adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), list);
viewPager = (ViewPager) this.findViewById(R.id.pager);
viewPager.setAdapter(adapter);
//给ViewPager添加页面切换监听事件
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
currentType = position;
viewPager.setCurrentItem(currentType);
}
});
btnRemove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (list.size() > 0) {
//删除当前的Fragment
adapter.destroyItem(viewPager, viewPager.getCurrentItem(), list.get(viewPager.getCurrentItem()));
list.remove(viewPager.getCurrentItem());
adapter.notifyDataSetChanged();
} else {
Toast.makeText(MainActivity .this, "fragment已经删光了", Toast.LENGTH_SHORT).show();
}
}
});
}
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> list;
public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
}
Activity的布局文件
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</android.support.v4.view.ViewPager>
<Button
android:id="@+id/btnRemove"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="remove"/>
</LinearLayout>
删除当前Fragment分三步
//第一步,调用destroyItem方法。
adapter.destroyItem(viewPager, viewPager.getCurrentItem(),list.get(viewPager.getCurrentItem()));
//第二步,删除list集合中的fragment
list.remove(viewPager.getCurrentItem());
//第三步,adapter刷新数据
adapter.notifyDataSetChanged();
总结:情况就是这么个情况
即墨明天看天气预报挺冷的,但是我还是要6:50去跑步,不惧。住的地方没有锻炼身体的场所,也是比较艰难啊。行,是时候看看小说准备睡觉了。