小编Bri*_*som的帖子

对于屏幕外项目,RecyclerView findViewHolder为null

[第一次提问者和第一次安卓编码器所以我道歉,如果我做错了什么]

我正在尝试更改我的回收器上的itemview内部的值.但是,如果该项目视图恰好在屏幕外,则findViewBy [布局,适配器或ID]将显示为null.

public void setUserActive(UserListAdapter adapter, RecyclerView recyclerView, int position, View v) {recyclerView.findViewHolderForItemId(adapter.getItemId(position));
    TextView txtActive = (TextView) vh.itemView.findViewById(R.id.user_isActive);
    txtActive.setText("Active");
    UserListAdapter.ViewHolder inactivevh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForItemId(adapter.getItemId(adapter.getActiveUserPosition()));
    TextView txtInActive = (TextView) inactivevh.itemView.findViewById(R.id.user_isActive);
    txtInActive.setText("");
    adapter.setActiveUserPosition(position);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法,从使用

  UserListAdapter.ViewHolder vh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForLayoutPosition(position);
Run Code Online (Sandbox Code Playgroud)

要么

UserListAdapter.ViewHolder inactivevh = (UserListAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(position)
Run Code Online (Sandbox Code Playgroud)

当应该处于inactivevh的视图关闭时,它们都会失败.

我已将适配器设置为hasStableIDs = true notifydatasetchanged似乎也没有帮助.

android recycler-adapter android-recyclerview

11
推荐指数
1
解决办法
7286
查看次数

使用Backstack时TabLayout ViewPager不加载

我在我的一个片段中使用TabLayout,并使用viewPager在标签下方的两个片段之间切换.

当我单击其中一个较低片段中的FAB时,我加载一个新片段(用于输入).

但是 - 当我按下BACK按钮时,TabLayout会显示但没有任何一个较低的片段(由页面表示).

那么我做错了什么?

  • 是否有更好的方式来交换片段
  • 有没有办法按后退按钮并返回正在显示的viewPager页面?

在FAB点击之前来自BackStack 使用TabLayout的片段:CustomTemplatesFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_custom_templates, container, false);
    final TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText(R.string.macro_tab));
    tabLayout.addTab(tabLayout.newTab().setText(R.string.lifestyle_tab));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager);
    final CustomTemplatesPagerAdapter adapter = new CustomTemplatesPagerAdapter
            (getFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void …
Run Code Online (Sandbox Code Playgroud)

android android-fragments back-stack fragment-backstack android-tablayout

6
推荐指数
1
解决办法
2864
查看次数