簡體   English   中英

無法在片段中設置RecycleView適配器

[英]Cannot set RecycleView Adapter in Fragment

我有這樣的片段

...

public class Dashboard extends Fragment{
    private RecyclerView mTopSellersListView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main_dashboard, container, false);
        mTopSellersListView = (RecyclerView) view.findViewById(R.id.topSellersListView);
        return view;
    }

    public void setTopSellersListView(MyRecycleAdapter adapter){
        mTopSellersListView.setHasFixedSize(true);
        mTopSellersListView.setAdapter(adapter);
        mTopSellersListView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mTopSellersListView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));
        mTopSellersListView.setItemAnimator(new DefaultItemAnimator());
    }
}

我總共有4個片段,可以使用此方法通過底部欄在MainActivity中切換所有片段,當用戶點擊菜單時,它將用另一個片段替換當前片段(默認值:儀表板):

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDashboardFragment = new Dashboard();
        mOrdersFragment = new Orders();
        mProductsFragment = new Products();
        mSettingFragment = new Setting();
        settingMenu(savedInstanceState);
}

...

public void selectMenu(String menu){
    Fragment fr = null;
    switch (menu) {
        case "Dashboard":
            fr = mDashboardFragment;
            break;
        case "Orders":
            fr = mOrdersFragment;
            break;
        case "Products":
            fr = mProductsFragment;
            break;
        case "Setting":
            fr = mSettingFragment;
            break;
    }
    FragmentManager fm = getFragmentManager();
    FragmentTransaction fragmentTransaction = fm.beginTransaction();
    fragmentTransaction.replace(R.id.fragment, fr);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

我在另一個類(不是活動類)中訪問setTopSellersListView()

MainActivity.mDashboardFragment.setTopSellersListView(mProductAdapter);

並在mTopSellersListView.setHasFixedSize(true)處獲得了NullPointerExceptions

首先設置您的layoutManager而不是使用setHasFizedSize(true)。因為layoutManager決定了recyclerView的大小。

我已經通過在Fragment的onStart()中調用setTopSellersListView()修復了它,並且效果很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM