首页 > 解决方案 > 如何在一个 Activity 中显示多个 RecyclerView 的更简单的表达式

问题描述

我正在尝试在每个 RecyclerView 中将多个 RecyclerView 除以 TextView,这段代码对我有用,但我想让代码更简单。有人可以帮我解决这个问题吗?

这是我的 Activity.java:

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    ((MainActivity) getActivity()).setActionBarTitle("Tuntunan Toharoh");

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_home, container, false);

    //=============================================================
    mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(layoutManager);

    mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));
    RecyclerView.Adapter tadapter = new RecyclerViewAdapter(getActivity(), mRecyclerViewItems);
    mRecyclerView.setAdapter(tadapter);
    addMenuItemsFromJson();
    mRecyclerView.setNestedScrollingEnabled(false);

    //=========================================================
    DzRecyclerView2 = (RecyclerView) view.findViewById(R.id.recycler_submenu);
    DzRecyclerView2.setHasFixedSize(true);

    RecyclerView.LayoutManager zlayoutManager = new LinearLayoutManager(getActivity());
    DzRecyclerView2.setLayoutManager(zlayoutManager);

    RecyclerView.Adapter zadapter = new RecyclerViewAdapter(getActivity(), mRecyclerViewItems2);
    DzRecyclerView2.setAdapter(zadapter);
    addMenuItemsFromJson2();
    DzRecyclerView2.setNestedScrollingEnabled(false);

    //=========================================================
    DzaRecyclerView3 = (RecyclerView) view.findViewById(R.id.recycler_mandi);
    DzaRecyclerView3.setHasFixedSize(true);

    RecyclerView.LayoutManager zzlayoutManager = new LinearLayoutManager(getActivity());
    DzaRecyclerView3.setLayoutManager(zzlayoutManager);

    RecyclerView.Adapter ziadapter = new RecyclerViewAdapter(getActivity(), mRecyclerViewItems3);
    DzaRecyclerView3.setAdapter(ziadapter);
    addMenuItemsFromJson3();
    DzaRecyclerView3.setNestedScrollingEnabled(false);
    //=========================================================

    return view;


private void addMenuItemsFromJson() {
    try {
        String jsonDataString = readJsonDataFromFile();
        JSONArray menuItemsJsonArray = new JSONArray(jsonDataString);

        for (int i = 0; i < menuItemsJsonArray.length(); ++i) {

            JSONObject menuItemObject = menuItemsJsonArray.getJSONObject(i);

            String menuItemtitle = menuItemObject.getString("title");
            String menuItemContent = menuItemObject.getString("content");

            DafAdapter dafa = new DafAdapter(menuItemtitle, menuItemContent);
            mRecyclerViewItems.add(dafa);
        }
    } catch (IOException | JSONException exception) {
        Log.e(MainActivity.class.getName(), "Unable to parse JSON file.", exception);
    }
}


private String readJsonDataFromFile() throws IOException {

    InputStream inputStream = null;
    StringBuilder builder = new StringBuilder();

    try {
        String jsonDataString = null;
        inputStream = getResources().openRawResource(R.raw.tayamum);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream, "UTF-8"));
        while ((jsonDataString = bufferedReader.readLine()) != null) {
            builder.append(jsonDataString);
        }
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
    }

    return new String(builder);
}

private void addMenuItemsFromJson2() {
    try {
        String jsonDataString = readJsonDataFromFile2();
        JSONArray menuItemsJsonArray = new JSONArray(jsonDataString);

        for (int i = 0; i < menuItemsJsonArray.length(); ++i) {

            JSONObject menuItemObject = menuItemsJsonArray.getJSONObject(i);

            String menuItemtitle = menuItemObject.getString("title");
            String menuItemContent = menuItemObject.getString("content");

            DafAdapter dafa = new DafAdapter(menuItemtitle, menuItemContent);
            mRecyclerViewItems2.add(dafa);
        }
    } catch (IOException | JSONException exception) {
        Log.e(MainActivity.class.getName(), "Unable to parse JSON file.", exception);
    }
}

private String readJsonDataFromFile2() throws IOException {

    InputStream inputStream = null;
    StringBuilder builder = new StringBuilder();

    try {
        String jsonDataString = null;
        inputStream = getResources().openRawResource(R.raw.wudhu);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream, "UTF-8"));
        while ((jsonDataString = bufferedReader.readLine()) != null) {
            builder.append(jsonDataString);
        }
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
    }

    return new String(builder);
}
private void addMenuItemsFromJson3() {
    try {
        String jsonDataString = readJsonDataFromFile3();
        JSONArray menuItemsJsonArray = new JSONArray(jsonDataString);

        for (int i = 0; i < menuItemsJsonArray.length(); ++i) {

            JSONObject menuItemObject = menuItemsJsonArray.getJSONObject(i);

            String menuItemtitle = menuItemObject.getString("title");
            String menuItemContent = menuItemObject.getString("content");

            DafAdapter dafa = new DafAdapter(menuItemtitle, menuItemContent);
            mRecyclerViewItems3.add(dafa);
        }
    } catch (IOException | JSONException exception) {
        Log.e(MainActivity.class.getName(), "Unable to parse JSON file.", exception);
    }
}

private String readJsonDataFromFile3() throws IOException {

    InputStream inputStream = null;
    StringBuilder builder = new StringBuilder();

    try {
        String jsonDataString = null;
        inputStream = getResources().openRawResource(R.raw.mandi);
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream, "UTF-8"));
        while ((jsonDataString = bufferedReader.readLine()) != null) {
            builder.append(jsonDataString);
        }
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
    }

    return new String(builder);
}

如果我想添加一个或多个 RecyclerView,它只是做一个类似的表达式,只需将表达式 1 更改为其他表达式。我认为它可以比那个代码更简单。

我尝试了 switch 和 if 块,但我没有任何运气。我该怎么做?

标签: javaandroidandroid-activityandroid-recyclerview

解决方案


为什么不把 RecyclerViews 和 TextViews 的列表放在一个垂直的 Recyclerview 中

所以你可以动态绑定它们

编辑

为了创建一个垂直回收器视图,您应该首先查看是否可以将所有行数据包装在一个单一的List或不?

因此,如果可能的话,剩下的就是创建一个垂直LayoutManager来显示你的行。类似于 :new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) 并从那里将其分配给您的 new RecyclerView,剩下的就是创建ViewHolders它们并将它们与数据绑定。这很简单。

您可以查看此示例项目以更好地理解


推荐阅读