频道管理(ViewPager页面中)
我们先来看一下效果图
我写了三个页面(首页 推荐 我的)
我要在推荐的页面写一个频道管理 其实和之前的写法几乎是一样的
1.在推荐的页面进行布局
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
</android.support.design.widget.TabLayout>
<Button
android:id="@+id/btn_jia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
2.在.java中编写代码
注意:在initView()方法的点击+号传值中getActivity() 要转换成 AppCompatActivity类型
ChannelActivity.startChannelActivity( (AppCompatActivity) getActivity(),channelBeanlist);
public class Fragment2 extends Fragment {
private View view;
private ViewPager pager1;
private TabLayout tablayout;
private Button btn_jia;
ArrayList<Fragment> fragmentlist = new ArrayList<>();
ArrayList<ChannelBean> channelBeanlist = new ArrayList<>();
private TabAdapter tabAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate( R.layout.fragment2, container, false );
//调用方法
initView();
initData();
return view;
}
//方法initView
private void initView(){
pager1 = (ViewPager)view.findViewById( R.id.pager1 );
tablayout = (TabLayout)view.findViewById( R.id.tablayout );
btn_jia = (Button)view.findViewById( R.id.btn_jia );
//给pager1设置适配器
tabAdapter = new TabAdapter( getChildFragmentManager() );
pager1.setAdapter( tabAdapter );
//把tablayout和pager关联起来
tablayout.setupWithViewPager( pager1 );
//当我点击+号的时候
btn_jia.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转
ChannelActivity.startChannelActivity( (AppCompatActivity) getActivity(),channelBeanlist);
}
} );//当我点击+号的时候
}
private void initData(){
//设置标题
channelBeanlist.add( new ChannelBean( "热点",true ) );
channelBeanlist.add( new ChannelBean( "北京",true ) );
channelBeanlist.add( new ChannelBean( "邯郸",true ) );
channelBeanlist.add( new ChannelBean( "河南",false ) );
channelBeanlist.add( new ChannelBean( "天津",false ) );
channelBeanlist.add( new ChannelBean( "山西",false ) );
//循环
for (int i = 0; i < channelBeanlist.size(); i++) {
if (channelBeanlist.get( i ).isSelect()) {//如果为选中
//就显示到tablayout上
tablayout.addTab( tablayout.newTab().setText( channelBeanlist.get( i ).getName() ) );
if (i == 0) {
fragmentlist.add( new Fragment4() );
}else if(i==1){
fragmentlist.add( new Fragment5() );
}else{
fragmentlist.add( new Fragment6());
}
}
}
//刷新适配器
tabAdapter.notifyDataSetChanged();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String jsonString = data.getStringExtra( ChannelActivity.RESULT_JSON_KEY );
//开始解析
Gson gson = new Gson();
//把数组转变成为集合
Type type = new TypeToken<ArrayList<ChannelBean>>() {}.getType();
channelBeanlist= gson.fromJson( jsonString, type );
tablayout.removeAllTabs();
fragmentlist.clear();
//重新添加tab和fragment
for (int i = 0; i < channelBeanlist.size(); i++) {
if (channelBeanlist.get( i ).isSelect()) {//如果为选中
//就显示到tablayout上
tablayout.addTab( tablayout.newTab().setText( channelBeanlist.get( i ).getName() ) );
if (i == 0) {
fragmentlist.add( new Fragment4() );
}else if(i==1){
fragmentlist.add( new Fragment5() );
}else{
fragmentlist.add( new Fragment6());
}
}
}
//刷新适配器
tabAdapter.notifyDataSetChanged();
}
//适配器
private class TabAdapter extends FragmentPagerAdapter {
public TabAdapter(FragmentManager fm) {
super( fm );
}
@Override
public Fragment getItem(int i) {
return fragmentlist.get( i );
}
@Override
public int getCount() {
return fragmentlist.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return channelBeanlist.get( position ).getName();
}
}//适配器
}
3.转发
在MainActivity.java中编写代码
transaction.add( R.id.pager, fragment2 ,“Fragment2”);
//开启事物
FragmentTransaction transaction = manager.beginTransaction();
//添加事物
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
transaction.add( R.id.pager, fragment1 );
transaction.add( R.id.pager, fragment2 ,"Fragment2");
transaction.add( R.id.pager, fragment3 );
接着在oncreat()下面写
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult( requestCode, resultCode, data );
Fragment fragment21 = manager.findFragmentByTag( "Fragment2" );
fragment21.onActivityResult( requestCode,resultCode,data );
}