在Recycler视图适配器中创建HashMap类型列表

时间:2016-07-01 10:14:43

标签: android android-recyclerview

我使用这个liabray进行滑动手势。 https://github.com/nikhilpanju/RecyclerViewEnhanced。 在MainAdapter.java类中,recyclerView包含List但我想将其替换为List>类型。当我这样做时,会出现很多错误。请指导我如何做到这一点或建议我做任何教程。

MainAdapter.java

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
    LayoutInflater inflater;
    List<RowModel> modelList;

    public MainAdapter(Context context, List<RowModel> list) {
        inflater = LayoutInflater.from(context);
        modelList = new ArrayList<>(list);
    }

    @Override
    public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.recycler_row, parent, false);
        return new MainViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MainViewHolder holder, int position) {
        holder.bindData(modelList.get(position));
    }

    @Override
    public int getItemCount() {
        return modelList.size();
    }

    class MainViewHolder extends RecyclerView.ViewHolder {

        TextView mainText, subText;

        public MainViewHolder(View itemView) {
            super(itemView);
            mainText = (TextView) itemView.findViewById(R.id.mainText);
            subText = (TextView) itemView.findViewById(R.id.subText);
        }

        public void bindData(RowModel rowModel) {
            mainText.setText(rowModel.getMainText());
            subText.setText(rowModel.getSubText());
        }
    }
}

的活动:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_panel);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        unclickableRows = new ArrayList<>();
        unswipeableRows = new ArrayList<>();
        dialogItems = new String[25];
        for (int i = 0; i < 25; i++) {
            dialogItems[i] = String.valueOf(i + 1);
        }

        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mAdapter = new MainAdapter(this, getData());
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        onTouchListener = new RecyclerTouchListener(this, mRecyclerView);
        onTouchListener
                .setIndependentViews(R.id.rowButton)
                .setViewsToFade(R.id.rowButton)
                .setClickable(new RecyclerTouchListener.OnRowClickListener() {
                    @Override
                    public void onRowClicked(int position) {
                        util.shortToast(getApplicationContext(), "Row " + (position + 1) + " clicked!");
                    }

                    @Override
                    public void onIndependentViewClicked(int independentViewID, int position) {
                        util.shortToast(getApplicationContext(), "Button in row " + (position + 1) + " clicked!");
                    }
                })
                .setSwipeOptionViews(R.id.add, R.id.edit, R.id.change)
                .setSwipeable(R.id.rowFG, R.id.rowBG, new RecyclerTouchListener.OnSwipeOptionsClickListener() {
                    @Override
                    public void onSwipeOptionClicked(int viewID, int position) {
                        String message = "";
                        if (viewID == R.id.add) {
                            message += "Add";
                        } else if (viewID == R.id.edit) {
                            message += "Edit";
                        } else if (viewID == R.id.change) {
                            message += "Change";
                        }
                        message += " clicked for row " + (position + 1);
                        util.shortToast(getApplicationContext(), message);
                    }
                });
        mRecyclerView.addOnItemTouchListener(onTouchListener);





        // Detect touched area
        detector = new Swipe(this,this);

        db = new DB(getApplicationContext());

        Bundle bundle = getIntent().getExtras();
        if(bundle != null) {
            String id = bundle.getString("id");
            Toast.makeText(this, "Welcome " + db.getUsernameById(id), Toast.LENGTH_LONG).show();
        }

        //get references of layout
//        adapter = new AdapterUsers(this, R.layout.textview_users, arrayList);
//        listView = (ListView) findViewById(R.id.users);
//        listView.setAdapter(adapter);
//
//        showAllUsers();
    }

    public void showAllUsers() {
        try {
            Cursor cursor = db.selectAllUsers();
            cursor.moveToFirst();
            adapter.clear();
            if (cursor.getCount() == 0) {
                Toast.makeText(this, "Empty user list", Toast.LENGTH_SHORT).show();
            } else {
                for (int i = 0; i < cursor.getCount(); i++) {
                    HashMap<String, Object> hm = new HashMap<String, Object>();
                    hm.put(ID, cursor.getString(cursor.getColumnIndex(db.ID_USER)));
                    hm.put(USERNAME, cursor.getString(cursor.getColumnIndex(db.NAME_USER)));
                    arrayList.add(hm);
                    cursor.moveToNext();
                }
            }
        } catch (Exception e) {
            Log.d("Show users", " failed due to " + e.getMessage());
        }
    }


    // Swipe interface
    @Override
    public void onSwipe(int direction) {
        String str = "";

        switch (direction) {

            case Swipe.SWIPE_RIGHT :
                listView.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View arg0) {
                        //deleteUser(id);
                        Toast.makeText(AdminPanel.this, "user deleted", Toast.LENGTH_LONG).show();
                    }
                });
                str = "Swipe Right";
                break;
            case Swipe.SWIPE_LEFT :  str = "Swipe Left";
                break;
            case Swipe.SWIPE_DOWN :  str = "Swipe Down";
                break;
            case Swipe.SWIPE_UP :    str = "Swipe Up";
                break;

        }
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDoubleTap() {
        Toast.makeText(this, "Double Tap", Toast.LENGTH_SHORT).show();
    }


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (touchListener != null) touchListener.getTouchCoordinates(ev);
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public void setOnActivityTouchListener(OnActivityTouchListener listener) {
        this.touchListener = listener;
    }

    private List<RowModel> getData() {
        List<RowModel> list = new ArrayList<>(25);
        for (int i = 0; i < 25; i++) {
            list.add(new RowModel("Row " + (i + 1), "Some Text... "));
        }
        return list;
    }

}

1 个答案:

答案 0 :(得分:1)

你可以改变你的getData()方法并让它返回HashMap。

 private HashMap <String,String> getData() {
        HashMap <String,String> list = new HashMap <String,String>();
        for (int i = 0; i < 25; i++) {
            list.put(i,"Text");
        }
        return list;
    }

现在在您的适配器中,您可以像...一样处理它。

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
LayoutInflater inflater;
<HashMap<String,String> modelList;

public MainAdapter(Context context, <HashMap<String,String> modelList) {
    this.inflater = LayoutInflater.from(context);
    this.modelList = modelList;
}

@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.recycler_row, parent, false);
    return new MainViewHolder(view);
}

@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
    //holder.bindData();
    holder.mainText.setText(modelList.get(position)); // value for the given key
}

@Override
public int getItemCount() {
    return modelList.size();
}

class MainViewHolder extends RecyclerView.ViewHolder {

    TextView mainText, subText;

    public MainViewHolder(View itemView) {
        super(itemView);
        mainText = (TextView) itemView.findViewById(R.id.mainText);
        subText = (TextView) itemView.findViewById(R.id.subText);
    }

}
}