2017-12-26 1 views
0

私はrecyclerviewを使ってfirebaseデータベースからデータを取得していますが、デフォルトのレイアウトマネージャを線形として設定していますが、listviewからgridviewに切り替えることができる必要があります。働いていない。それは、gridview item.Itをクリックすると、状態を変更していないので、linearlayout managerとしてデフォルトの状態にとどまることはありません。Recyclerviewを使用してGridViewを切り替えるか、

public class Welcome extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    FirebaseDatabase database; 
    DatabaseReference category; 
    TextView txtfullname; 
    RecyclerView recycler_menu; 
    RecyclerView.LayoutManager layoutManager; 
    FirebaseRecyclerAdapter<Category,MenuViewHolder> adapter; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_welcome); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     toolbar.setTitle("Menu"); 
     setSupportActionBar(toolbar); 

     //init firebase 
     database = FirebaseDatabase.getInstance(); 
     category=database.getReference("Category"); 



     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.addDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 


    //set name for user 
    View headerView= navigationView.getHeaderView(0); 
    txtfullname= headerView.findViewById(R.id.nav_view); 
// txtfullname.setText(Common.currentUser.getName()); 

    //Load menu using firebase ui to bind data from frebase to recyclerview 

     recycler_menu =findViewById(R.id.recyclerview); 
     recycler_menu.setHasFixedSize(true); 
     layoutman(); 
     recycler_menu.setLayoutManager(layoutManager); 

     loadMenu(); 

    } 

    private void layoutman() { 
     layoutManager=new LinearLayoutManager(this); 

    } 

    private void loadMenu() { 
     adapter =new FirebaseRecyclerAdapter<Category, MenuViewHolder>(Category.class,R.layout.menu_item,MenuViewHolder.class,category) { 
      @Override 
      protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) { 
       viewHolder.txtMenuName.setText(model.getName()); 
       Picasso.with(getBaseContext()).load(model.getImage()) 
         .into(viewHolder.imageView); 
       final Category clickItem = model; 
       viewHolder.setItemClickListener(new ItemClickListener() { 
        @Override 
        public void onClick(View view, int position, boolean isLongClick) { 
         Toast.makeText(Welcome.this,""+clickItem.getName(),Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }; 
     recycler_menu.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.welcome, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     if (id==R.id.list){ 
     layoutman(); 
     adapter.notifyDataSetChanged(); 

      return true; 
     } 
     if (id==R.id.grid){ 
      layoutManager=new GridLayoutManager(getApplicationContext(),2); 
      adapter.notifyDataSetChanged(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_menu) { 
      // Handle the camera action 
     } else if (id == R.id.nav_cart) { 

     } else if (id == R.id.nav_orders) { 

     } else if (id == R.id.nav_log_out) { 

     } else if (id == R.id.share) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

答えて

0

リストビューのデータについては、例えば、あなたのレイアウトマネージャは、シンプルなリストビュー

については

compile 'com.android.support:recyclerview-v7:23.2.0' 
グリッドビューレイアウトマネージャのためのコードの下

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2); 
    recyclerView.setLayoutManager(layoutManager); 

する必要があり、クリックイベントにレイアウトマネージャを変更する必要があります

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(layoutManager); 

リストビューをそれぞれ変更する必要がありますこれはあなたを助けます

1

あなたは正しいことだけした後、それが動作する必要があること)(それ以外の場合は動作しませんもう一度recyclerview上のレイアウトマネージャを設定する必要があり、その後ちょうどnotifydatasetchanged呼び出す必要があります。

+0

はまだ動作しません –

関連する問題