【问题标题】:Bottom Navigation View not updating RecyclerView底部导航视图不更新 RecyclerView
【发布时间】:2018-04-02 17:53:31
【问题描述】:

您好,我在我的应用程序中使用底部导航,底部有三个选项卡,并且有三个不同的片段。每当用户从底部更改选项卡时,它应该显示相关的 RecyclerView 数据,但问题是在所有三个选项卡中它显示一个 RecyclerView。它在所有三个选项卡中显示了 ItemOneFragment 的 RecyclerView。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView bottomNavigationView = (BottomNavigationView)
                findViewById(R.id.navigation);

        bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                      //  Fragment selectedFragment = null;
                        switch (item.getItemId()) {
                            case R.id.navigation_home:
                                Fragment selectedFragment = ItemOneFragment.newInstance();
                                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                                transaction.replace(R.id.frame_layout, selectedFragment);
                                transaction.commit();
                                break;
                            case R.id.navigation_dashboard:
                                Fragment Englishsfrag = ItemTwoFragment.newInstance();
                                FragmentTransaction transactiontwo = getSupportFragmentManager().beginTransaction();
                                transactiontwo.replace(R.id.frame_layout, Englishsfrag);
                                transactiontwo.commit();
                                break;
                            case R.id.navigation_notifications:
                                Fragment mixfrag = ItemThreeFragment.newInstance();
                                FragmentTransaction transactionthree = getSupportFragmentManager().beginTransaction();
                                transactionthree.replace(R.id.frame_layout, mixfrag);
                                transactionthree.commit();
                                break;
                        }

                        return true;
                    }
                });

        //Manually displaying the first fragment - one time only
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, ItemOneFragment.newInstance());
        transaction.commit();

        //Used to select an item programmatically
        //bottomNavigationView.getMenu().getItem(2).setChecked(true);
    }
}

【问题讨论】:

  • 显示你的代码在哪里实现了Recyclerview
  • 它的代码真的很大,无法完成文件,它是三个不同的片段,我使用的是工作室提供的默认导航结构..
  • 这是您的代码是正确的,但我必须查看您的 recyclerview 代码任何代码链接

标签: android android-fragments bottomnavigationview


【解决方案1】:

删除为每个案例创建 FragmentTransaction

bottomNavigationView.setOnNavigationItemSelectedListener
      (new BottomNavigationView.OnNavigationItemSelectedListener() {
      @Override
      public boolean onNavigationItemSelected(@NonNull MenuItem item) {
      Fragment selectedFragment = null;
      switch (item.getItemId()) {
      case R.id.action_item1:
      selectedFragment = ItemOnFragment.newInstance();
      break;
      case R.id.action_item2:
      selectedFragment = ItemTwoFragment.newInstance();
      break;
      case R.id.action_item3:
      selectedFragment = ItemThreeFragment.newInstance();
      break;
      case R.id.action_item4:
      selectedFragment = ItemFourFragment.newInstance();
      break;
      }
      FragmentTransaction transaction = getSupportFragmentManager().
    beginTransaction();
      transaction.replace(R.id.frame_layout, selectedFragment);
      transaction.commit();
      return true;
      }
      });

      //Manually displaying the first fragment - one time only
      FragmentTransaction transaction = getSupportFragmentManager().
    beginTransaction();
      transaction.replace(R.id.frame_layout, ItemOnFragment.newInstance());
      transaction.commit();

【讨论】:

    【解决方案2】:

    我认为最好按照以下方式进行

    public class MainActivity extends AppCompatActivity {
    
    Fragment fragment;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView bottomNavigationView = (BottomNavigationView)
                findViewById(R.id.navigation);
        fragment = ItemOneFragment.newInstance();
    
        bottomNavigationView.setOnNavigationItemSelectedListener
                (new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        //  Fragment selectedFragment = null;
                        switch (item.getItemId()) {
                            case R.id.navigation_home:
                                fragment = ItemOneFragment.newInstance();
                                break;
                            case R.id.navigation_dashboard:
                                fragment = ItemTwoFragment.newInstance();
                                break;
                            case R.id.navigation_notifications:
                                fragment = ItemThreeFragment.newInstance();
                                break;
                        }
                        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.frame_layout, fragment);
                        transaction.commit();
                        return true;
                    }
                });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      相关资源
      最近更新 更多