Android 单击“活动”按钮,在片段中将recycleview listview更改为gridview

Android 单击“活动”按钮,在片段中将recycleview listview更改为gridview,android,android-fragments,android-viewpager,android-recyclerview,Android,Android Fragments,Android Viewpager,Android Recyclerview,我在“活动”中有一个表格,viewpager上有两个片段。这两个片段都将具有recyclerview。我想要的是在活动的菜单按钮上,将两个片段中的recyclerview的布局管理器从列表更改为网格,反之亦然。我曾考虑使用接口,但无法将其添加到片段中。有没有办法做到这一点 //片段 公共类FragOne扩展片段{ 回收查看回收; FragOneAdapter适配器; ArrayList ArrayList=新的ArrayList(); @可空 @凌驾 创建视图时的公共视图(LayoutFlat

我在“活动”中有一个表格,viewpager上有两个片段。这两个片段都将具有recyclerview。我想要的是在活动的菜单按钮上,将两个片段中的recyclerview的布局管理器从列表更改为网格,反之亦然。我曾考虑使用接口,但无法将其添加到片段中。有没有办法做到这一点

//片段
公共类FragOne扩展片段{
回收查看回收;
FragOneAdapter适配器;
ArrayList ArrayList=新的ArrayList();
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
返回充气机。充气(R.layout.fragone,容器,假);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
recycle=(RecyclerView)view.findViewById(R.id.recycle);
preparedata();
适配器=新的FragOneAdapter(arrayList);
RecyclerView.LayoutManager mLayoutManager=新建LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
recycle.setLayoutManager(mLayoutManager);
ItemOffsetDecoration itemDecoration=新的ItemOffsetDecoration(getActivity(),R.dimen.spacing_normal);
回收。添加装饰(项目装饰);
recycle.setHasFixedSize(true);
recycle.setAdapter(适配器);
}
私有无效准备数据(){
模型=新模型();
model.setName(“Name1”);
型号:setMobile(“1234567890”);
arrayList.add(模型);
模型1=新模型();
模型1.集合名(“名称2”);
型号1.setMobile(“1234567891”);
arrayList.add(model1);
模型2=新模型();
模型2.集合名(“名称3”);
型号2.setMobile(“1234567892”);
arrayList.add(model2);
模型3=新模型();
模型3.集合名(“名称4”);
型号3.setMobile(“1234567893”);
arrayList.add(model3);
模型4=新模型();
模型4.集合名(“名称5”);
型号4.setMobile(“1234567894”);
arrayList.add(model4);
模型5=新模型();
模型5.集合名(“名称6”);
型号5.setMobile(“1234567890”);
arrayList.add(model5);
}   
}
//活动
公共类MainActivity扩展了AppCompatActivity{
int图标=0;
查看页面查看页面;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终工具栏=(工具栏)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“视差选项卡”);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager=(viewPager)findViewById(R.id.viewPager);
设置viewPager(viewPager);
TabLayout TabLayout=(TabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
最终折叠工具栏布局折叠工具栏布局=(折叠工具栏布局)findViewById(R.id.collapse\u工具栏);
折叠ToolbarLayout.setTitleEnabled(false);
}
专用无效设置ViewPager(ViewPager ViewPager){
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(新FragOne(),“一”);
adapter.addFrag(新FragTwo(),“两个”);
viewPager.setAdapter(适配器);
}
静态类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFrag(片段、字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.项目:
如果(图标==0){
图标=1;
setIcon(getResources().getDrawable(R.drawable.ic_网格));
}else if(图标==1){
图标=0;
setIcon(getResources().getDrawable(R.drawable.ic_list));
}
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}

}
在你的片段中,你也有这个方法

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
        case R.id.xyz:
       // now change your layout from LinearLayoutManager to GridLayoutManager here
        return true;
      }


      return super.onOptionsItemSelected(item);
    }

在片段重写方法OnOptions ItemSelected()中,以及在基于用户选择的方法中,更改布局。代码说明更多..请参见以下内容:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
       super.onOptionsItemSelected(item);

        //change your layout from linear to grid here

      return true;
    }

如果我的答案对您有帮助,请向上投票。

好的,下面是您可以做的:

GridLayoutManager layoutManager;
RecyclerView recycle;

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   super.onOptionsItemSelected(item);

    layoutManager = new GridLayoutManager(getContext(), 4);
    recycle.setLayoutManager(layoutManager);
    recycler.setItemAnimator(new DefaultItemAnimator());
    recycle.setHasFixedSize(true);
    recycle.setAdapter(adapter);

  return true;
}

我没有连接适配器,因为您可以自己连接,整数4表示您需要多少列。在本例中,将有4列。检查是否有帮助,并让我知道。:)

您是否尝试过在单击按钮然后通知()适配器时从LinearLayoutManager更改为GridLayoutManager?我主要关心的是如何将单击操作从活动的
onOptionItemSelected
传递到片段。您也可以在片段中使用onOptionItemSelected,只要把身份证递给我,还是显示无法联系到?谢谢Bhavesh。耶