【问题标题】:Recyclerview Redraw itself When navigating to another recycler view in Tabbed ActivityRecyclerview 重绘自身 在选项卡式活动中导航到另一个回收器视图时
【发布时间】:2017-09-15 17:32:13
【问题描述】:

这是我在第一个片段的 onCreateView 中运行的 AsyncTask

class GetDatas extends AsyncTask<Void, Void, Void>
{

    Collection<ProfileDataModel> enums = Collections.EMPTY_LIST;
    @Override
    protected Void doInBackground(Void... voids) {
        try{
            client = new OkHttpClient();
            String response = OkHttpService.GET(client, webUrl);
            Gson gson = new Gson();
            Type type = new TypeToken<Collection<ProfileDataModel>>(){}.getType();
            enums = gson.fromJson(response, type);
            profileDataModels = enums.toArray(new ProfileDataModel[enums.size()]);
            listAdapter = new ListAdapter(Arrays.asList(profileDataModels), getContext());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        profileDataModels = enums.toArray(new ProfileDataModel[enums.size()]);
        listAdapter = new ListAdapter(Arrays.asList(profileDataModels), getContext());
        recyclerView.setAdapter(listAdapter);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
    }
}

在第三个片段中,我使用了不需要获取的虚拟数据

public class MainFragment extends Fragment {
RecyclerView recyclerView;
LinearLayout linearLayout;


@Override
public View onCreateView(
        LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_video_list_pages, container, false);

    recyclerView = (RecyclerView) rootView.findViewById(R.id.video_list_recycler_view);
    recyclerView.setHasFixedSize(true);

    linearLayout = (LinearLayout) rootView.findViewById(R.id.video_list_adapter_rootframe);

    ListAdapter adapter = new ListAdapter(
            new String[] {
                    "mm","aa","sss","mm","aa","sss","mm","aa","sss","mm","aa","sss","mm","aa","sss"

            }
    );
    recyclerView.setAdapter(adapter);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(linearLayoutManager);


    return rootView;
}

}

你们中的一些人可能对命名感到困惑,但我喜欢保持这种方式, My Directory names

问题是当我从第一个片段滑动到第三个片段时,回收视图会重新绘制自己。当我转到仅包含文本视图的第二个片段时,这不会发生 有人可以解释为什么会这样吗?

【问题讨论】:

  • 第二个片段在做什么??

标签: android android-recyclerview android-viewpager


【解决方案1】:

好的,当您转到 第三个 片段时,片段 one 正在被破坏,因此要停止此功能,您必须覆盖 destroyItem 并将其保留为空白, 在你的 Activity 类中使​​用它

 @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

    }

您的问题将得到解决,下次在发布问题之前尝试通过类的所有方法
假设您在选项卡中有 4 个片段,它将只保留 2 个并销毁其余部分以节省内存,如果您有下一个和上一个选项卡,它也可以保留 3 个,如果您有 3 个选项卡,则可以通过保持 destroyItem 为空来覆盖它干杯!

如果您滚动 10-20 个标签页,您的应用程序可能会崩溃,请不要尝试实现

【讨论】:

  • 如果它解决了您的问题,请您选择答案以供将来参考?
猜你喜欢
  • 2019-05-28
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
相关资源
最近更新 更多