使用具有不同布局的相同recyclerview适配器

萨米

我有一个带有3个textviews的recyclerview适配器。我使用模型类来设置文本。现在,我想使用具有不同布局和不同类的同一适配器,该类仅具有1个textview。当我尝试时,我得到了NullPointerException(可能是因为其他两个textview是空白的)。有什么办法可以在不同的布局和不同的类中使用相同的适配器?

// second class - I used 1 textview 

public class Customers extends AppCompatActivity{

    private CShowProgress cShowProgress;
    private RecyclerView mRecyclerView;
    private TimeLineAdapter mTimeLineAdapter;
    private List<TimeLineModel> mDataList = new ArrayList<>();
    private static final String CUSTOMERS = "http://192.168.200.3/ubooktoday/android/showspacustomerlist";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.customers);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        cShowProgress = CShowProgress.getInstance();

        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(getLinearLayoutManager());
        mRecyclerView.setHasFixedSize(true);

        showCustomers();
    }

    private void showCustomers() {

        if(mDataList!=null )mDataList.clear();

        cShowProgress.showProgress(Customers.this);

        StringRequest stringRequest = new StringRequest(Request.Method.POST, CUSTOMERS,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        cShowProgress.hideProgress();

                        try {

                            JSONArray jsonArray = new JSONArray(response);

                            for(int i=0; i<jsonArray.length(); i++){
                                JSONObject obj = jsonArray.getJSONObject(i);

                                TimeLineModel model = new TimeLineModel();

                                model.setCustname(obj.getString("customername"));

                                mDataList.add(model);
                                mTimeLineAdapter = new TimeLineAdapter(getApplicationContext(), R.layout.item_row_customer, mDataList);
                                mRecyclerView.setAdapter(mTimeLineAdapter);
                            }


                            mTimeLineAdapter.notifyDataSetChanged();





                        } catch (JSONException e) {
                            // JSON error
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();

                params.put("spaid", "145");
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);
    }


    private LinearLayoutManager getLinearLayoutManager() {

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
        return linearLayoutManager;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                break;
        }
        return true;
    }
}

// first class - I used all 3 textviews

public class Walkin extends Fragment{

    private RecyclerView mRecyclerView;
    private TimeLineAdapter mTimeLineAdapter;
    private List<TimeLineModel> mDataList = new ArrayList<>();
    private static final String DASHBOARD = "My API";

    @Nullable
    @Override
  @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.walkin, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);


        mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(getLinearLayoutManager());
        mRecyclerView.setHasFixedSize(true);

        showDashboard();
    }

    private void showDashboard() {

        if(mDataList!=null )mDataList.clear();

        cShowProgress.showProgress(getActivity());

        StringRequest stringRequest = new StringRequest(Request.Method.POST, DASHBOARD,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {


                        try {
                            JSONObject jsonObject = new JSONObject(response);

                            JSONArray jsonArray = jsonObject.getJSONArray("walkinlist");

                            for(int i=0; i<jsonArray.length(); i++){
                                JSONObject obj = jsonArray.getJSONObject(i);

                                TimeLineModel model = new TimeLineModel();

                                model.setCustname(obj.getString("customername"));
                                model.setTime(obj.getString("serviceDuration"));
                                model.setServname(obj.getString("service"));

                                mDataList.add(model);
                                mTimeLineAdapter = new TimeLineAdapter(getActivity(), R.layout.item_row_dashboard, mDataList);
                                mRecyclerView.setAdapter(mTimeLineAdapter);
                            }


                            mTimeLineAdapter.notifyDataSetChanged();





                        } catch (JSONException e) {
                            // JSON error
                            e.printStackTrace();
                            Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();

                params.put("spaid", "145");
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
        requestQueue.add(stringRequest);
    }


    private LinearLayoutManager getLinearLayoutManager() {

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        return linearLayoutManager;

    }
}
// Adapter class

public class TimeLineAdapter extends RecyclerView.Adapter<TimeLineViewHolder> {

    private List<TimeLineModel> mFeedList;
    int resource;
    private Context mContext;

    public TimeLineAdapter(Context mContext, int resource, List<TimeLineModel> feedList) {

        this.resource = resource;
        this.mContext = mContext;
        mFeedList = feedList;
    }


    @Override
    public TimeLineViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = View.inflate(parent.getContext(), resource, null);
        return new TimeLineViewHolder(view, viewType);
    }

    @Override
    public void onBindViewHolder(TimeLineViewHolder holder, int position) {

        TimeLineModel timeLineModel = mFeedList.get(position);

        holder.servicename.setText(timeLineModel.getServname());
        holder.custname.setText(timeLineModel.getCustname());
        holder.time.setText(timeLineModel.getTime());

    }

    @Override
    public int getItemCount() {
        return (mFeedList!=null? mFeedList.size():0);
    }


}
// ViewHolder class

public class TimeLineViewHolder extends RecyclerView.ViewHolder {
    public TextView servicename, custname, time;

    public TimeLineViewHolder(View itemView, int viewType) {
        super(itemView);
        servicename = (TextView) itemView.findViewById(R.id.tv_service);
        custname = (TextView) itemView.findViewById(R.id.tv_cust);
        time = (TextView) itemView.findViewById(R.id.tv_time);
    }
}
哈西特

您可以使用getItemViewType()

  1. 使您的适配器(此处为TimeLineAdapter)RecyclerView.Adapter扩展
  2. 您可以更改适配器的构造函数以接收ItemType并在 getItemViewType
  3. Overrideint getItemViewType (int position)适配器中方法。
  4. 在onCreateViewHolder中,您可以使用viewType参数来区分要膨胀的布局
  5. onBindViewHolder使用instanceof检查哪个ViewHolder创建并调用相关功能绑定

示例代码-

    // Adapter class
public class TimeLineAdapter extends RecyclerView.Adapter{
.....
int type;

    public TimeLineAdapter(Context mContext, int resource, List<TimeLineModel> feedList,int layoutType) {
    .....
     .....
    type=layoutType;
    }

     @Override
    public int getItemViewType(int position) {
        return type;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(viewType==1){
                View view = View.inflate(parent.getContext(), resource, null);
                return new TimeLineViewHolder(view, viewType);
        }else{
            View view = View.inflate(parent.getContext(), resource, null);
            return new TimeLineViewHolder2(view, viewType);
        }
     }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        if(holder instanceof TimeLineViewHolder){   

                TimeLineModel timeLineModel = mFeedList.get(position);

              ((TimeLineViewHolder)  holder).servicename.setText(timeLineModel.getServname());
            ......
        }
        else if(holder instanceof TimeLineViewHolder2){
            ....
            ....
        }

    }

    @Override
    public int getItemCount() {
        return (mFeedList!=null? mFeedList.size():0);
    }


}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有CursorAdapter的Recyclerview适配器

来自分类Dev

使用RecyclerView适配器-错误E / RecyclerView:未连接适配器;跳过布局

来自分类Dev

E/RecyclerView:没有附加适配器跳过布局

来自分类Dev

E/RecyclerView:没有附加适配器;使用片段和 GSON 跳过布局

来自分类Dev

在适配器中膨胀不同的布局

来自分类Dev

在具有ViewHolder模式的适配器中使用动画

来自分类Dev

RecyclerView() 适配器

来自分类Dev

使用多个 RecyclerView 的适配器

来自分类Dev

RecyclerView没有显示任何项目。具有ViewBinding的RecyclerView适配器

来自分类Dev

E/RecyclerView:没有附加适配器;跳过布局如何解决下面是我的代码

来自分类Dev

E/RecyclerView:没有附加适配器;跳过布局(Android)

来自分类Dev

如何在TabActivity中使用相同的布局文件在不同的片段中使用具有不同功能的相同按钮

来自分类Dev

RecyclerView适配器布局未显示图标

来自分类Dev

Android:RecyclerView:未连接适配器;跳过布局

来自分类Dev

Recycleview RecyclerView:未连接适配器;跳过布局

来自分类Dev

E / RecyclerView:未连接适配器;跳过布局

来自分类Dev

RecyclerView 错误:未连接适配器;跳过布局

来自分类Dev

Fragments 中的 Recyclerview,跳过未附加适配器的布局

来自分类Dev

E / RecyclerView:未连接适配器;跳过布局(使用片段)

来自分类Dev

动态添加项目到具有不同列表和不同适配器的列表

来自分类Dev

使用自定义列表视图适配器和不同布局的结果不正确

来自分类Dev

具有片段空指针异常的Android RecyclerView适配器

来自分类Dev

具有片段空指针异常的Android RecyclerView适配器

来自分类Dev

recyclerview适配器中具有if条件的方法中缺少返回语句

来自分类Dev

启动Docker时,“ VirtualBox配置了多个具有相同IP的仅主机适配器”

来自分类Dev

通过NAT连接的网络适配器与主机具有相同的地址

来自分类Dev

从不同的活动更新recyclerview适配器onResume

来自分类Dev

让两个不同的 item 使用相同的适配器,并且 item 的每个数据都不会被 RecyclerView 中的其他 item 替换

来自分类Dev

使用相同的回收站适配器进行不同的活动

Related 相关文章

  1. 1

    具有CursorAdapter的Recyclerview适配器

  2. 2

    使用RecyclerView适配器-错误E / RecyclerView:未连接适配器;跳过布局

  3. 3

    E/RecyclerView:没有附加适配器跳过布局

  4. 4

    E/RecyclerView:没有附加适配器;使用片段和 GSON 跳过布局

  5. 5

    在适配器中膨胀不同的布局

  6. 6

    在具有ViewHolder模式的适配器中使用动画

  7. 7

    RecyclerView() 适配器

  8. 8

    使用多个 RecyclerView 的适配器

  9. 9

    RecyclerView没有显示任何项目。具有ViewBinding的RecyclerView适配器

  10. 10

    E/RecyclerView:没有附加适配器;跳过布局如何解决下面是我的代码

  11. 11

    E/RecyclerView:没有附加适配器;跳过布局(Android)

  12. 12

    如何在TabActivity中使用相同的布局文件在不同的片段中使用具有不同功能的相同按钮

  13. 13

    RecyclerView适配器布局未显示图标

  14. 14

    Android:RecyclerView:未连接适配器;跳过布局

  15. 15

    Recycleview RecyclerView:未连接适配器;跳过布局

  16. 16

    E / RecyclerView:未连接适配器;跳过布局

  17. 17

    RecyclerView 错误:未连接适配器;跳过布局

  18. 18

    Fragments 中的 Recyclerview,跳过未附加适配器的布局

  19. 19

    E / RecyclerView:未连接适配器;跳过布局(使用片段)

  20. 20

    动态添加项目到具有不同列表和不同适配器的列表

  21. 21

    使用自定义列表视图适配器和不同布局的结果不正确

  22. 22

    具有片段空指针异常的Android RecyclerView适配器

  23. 23

    具有片段空指针异常的Android RecyclerView适配器

  24. 24

    recyclerview适配器中具有if条件的方法中缺少返回语句

  25. 25

    启动Docker时,“ VirtualBox配置了多个具有相同IP的仅主机适配器”

  26. 26

    通过NAT连接的网络适配器与主机具有相同的地址

  27. 27

    从不同的活动更新recyclerview适配器onResume

  28. 28

    让两个不同的 item 使用相同的适配器,并且 item 的每个数据都不会被 RecyclerView 中的其他 item 替换

  29. 29

    使用相同的回收站适配器进行不同的活动

热门标签

归档