2

私はアクティビティでTabLayoutを、ビューページに2つのフラグメントを添付しました。両方のフラグメントにはrecyclerviewがあります。私が望むのは、アクティビティのメニューボタンをクリックすると、両方のフラグメントのリストラマネージャーをリストからグリッドに、そしてその逆に変更することです。私はインターフェイスを使用することを考えていましたが、それをフラグメントに追加できませんでした。これを達成する方法はありますか?あなたのフラグメントでリサイクルビューのリストビューをアクティビティボタンのフラグメントのグリッドビューに変更

// Fragment 
 

 
public class FragOne extends Fragment { 
 

 
    RecyclerView recycle; 
 
    FragOneAdapter adapter; 
 
    ArrayList<Model> arrayList = new ArrayList<>(); 
 

 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
 
     return inflater.inflate(R.layout.fragone, container, false); 
 
    } 
 

 
    @Override 
 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 
     recycle = (RecyclerView) view.findViewById(R.id.recycle); 
 
     preparedata(); 
 
     adapter = new FragOneAdapter(arrayList); 
 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL, false); 
 
     recycle.setLayoutManager(mLayoutManager); 
 
     ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(getActivity(), R.dimen.spacing_normal); 
 
     recycle.addItemDecoration(itemDecoration); 
 
     recycle.setHasFixedSize(true); 
 
     recycle.setAdapter(adapter); 
 
    } 
 

 
    private void preparedata(){ 
 
     Model model = new Model(); 
 
     model.setName("Name1"); 
 
     model.setMobile("1234567890"); 
 
     arrayList.add(model); 
 

 
     Model model1 = new Model(); 
 
     model1.setName("Name2"); 
 
     model1.setMobile("1234567891"); 
 
     arrayList.add(model1); 
 

 
     Model model2 = new Model(); 
 
     model2.setName("Name3"); 
 
     model2.setMobile("1234567892"); 
 
     arrayList.add(model2); 
 

 
     Model model3 = new Model(); 
 
     model3.setName("Name4"); 
 
     model3.setMobile("1234567893"); 
 
     arrayList.add(model3); 
 

 
     Model model4 = new Model(); 
 
     model4.setName("Name5"); 
 
     model4.setMobile("1234567894"); 
 
     arrayList.add(model4); 
 

 
     Model model5 = new Model(); 
 
     model5.setName("Name6"); 
 
     model5.setMobile("1234567890"); 
 
     arrayList.add(model5); 
 

 

 
    } 
 

 

 

 
}
// Activity 
 

 
public class MainActivity extends AppCompatActivity { 
 

 
    int icon = 0; 
 
    ViewPager viewPager; 
 

 
    @Override 
 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 
     getSupportActionBar().setTitle("Parallax Tabs"); 
 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 

 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
 
     setupViewPager(viewPager); 
 

 

 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
 
     tabLayout.setupWithViewPager(viewPager); 
 

 
     final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapse_toolbar); 
 
     collapsingToolbarLayout.setTitleEnabled(false); 
 

 

 
    } 
 

 
    private void setupViewPager(ViewPager viewPager) { 
 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
 
     adapter.addFrag(new FragOne(), "ONE"); 
 
     adapter.addFrag(new FragTwo(), "TWO"); 
 
     viewPager.setAdapter(adapter); 
 
    } 
 

 
    static class ViewPagerAdapter extends FragmentPagerAdapter { 
 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 
 

 
     public ViewPagerAdapter(FragmentManager manager) { 
 
      super(manager); 
 
     } 
 

 
     @Override 
 
     public Fragment getItem(int position) { 
 
      return mFragmentList.get(position); 
 
     } 
 

 
     @Override 
 
     public int getCount() { 
 
      return mFragmentList.size(); 
 
     } 
 

 
     public void addFrag(Fragment fragment, String title) { 
 
      mFragmentList.add(fragment); 
 
      mFragmentTitleList.add(title); 
 
     } 
 

 
     @Override 
 
     public CharSequence getPageTitle(int position) { 
 
      return mFragmentTitleList.get(position); 
 
     } 
 
    } 
 

 

 
    @Override 
 
    public boolean onCreateOptionsMenu(Menu menu) { 
 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
 
     return true; 
 
    } 
 

 
    @Override 
 
    public boolean onOptionsItemSelected(MenuItem item) { 
 
     switch (item.getItemId()) { 
 
      case R.id.item: 
 
       if(icon==0){ 
 
        icon = 1; 
 
        item.setIcon(getResources().getDrawable(R.drawable.ic_grid)); 
 
        
 

 
       }else if(icon==1){ 
 
        icon = 0; 
 
        item.setIcon(getResources().getDrawable(R.drawable.ic_list)); 
 
       } 
 

 
       return true; 
 

 
      default: 
 
       return super.onOptionsItemSelected(item); 
 
     } 
 
    } 
 

 
}

+2

ボタンをクリックしてからnotify()アダプタでLinearLayoutManagerからGridLayoutManagerに変更しようとしましたか? –

+0

ここで私の主な関心事は、クリックアクションをアクティビティの 'onOptionsItemSelected'からフラグメントに渡す方法です。 –

+2

フラグメント内でもonOptionItemSelectedを使用できますが、idを渡すだけです。それとも到達不能であることを示していますか? –

答えて

0

も、あなたは、このメソッドを持っています。

@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); 
    } 
0

両方のフラグメントオーバーライドメソッドonOptionsItemSelected()内とその中のユーザー選択変更レイアウトに基づいています。コードは以下を参照してください。

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

     //change your layout from linear to grid here 

     return true; 
    } 

upvoted私の答えがあなたを助けてくれます。ここ

0

OKは、あなたが何ができるかです:

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つの列があります。それが助けてくれれば教えてください。 :)

+0

答えをありがとう。私はすでにそれを実装しました。私はまた、アダプタのレイアウトを変更する方法を尋ねていた。リストの場合:R.layout.list_row、グリッドの場合:R.layout_grid。私は同様のものを表示する投稿を見た@stackoverflow.com/questions/28581712/android-recyclerview-change-layout-file-list-to-grid-onoptionitemselected @Bhavesh –

+0

@SomnathPalちょうど2つの異なるアダプタを作成し、レイアウトを定義するそこで。さて、うれしかった:) –

関連する問題