如何获取SQLite值onClick recyclerview以显示另一个活动中的详细信息

时间:2016-09-07 18:11:17

标签: android sqlite onclick android-recyclerview

我是Android新手并构建一个简单的笔记应用程序来开始使用。我设法使用this库实现了recyclerview。

recyclerview是我显示标题和简短描述的备注列表。当用户单击列表中的某一行时,它会打开另一个活动并显示该笔记的内容。

为了做到这一点,我需要获取id(SQLite DB中的主键)并使用intent.putExtra传递给详细信息活动。

我在活动的onCreate中使用此方法来处理recyclerview点击事件。

onTouchListener = new RecyclerTouchListener(this, mRecyclerView);
        onTouchListener
                    .setClickable(new RecyclerTouchListener.OnRowClickListener() {
                    @Override
                    public void onRowClicked(int position) {
                        // ToastUtil.makeToast(getApplicationContext(), "Row Position " + (position + 1) + " clicked!");
                        Intent intent = new Intent(getApplicationContext(), NotesDetailActivity.class);
                        startActivity(intent);
                    }

在这种方法中,我只能得到列表中行的位置。我需要获取id,以便我可以转到另一个我可以显示注释内容的活动。目前,我只是在用户单击列表中的一行时显示Toast中的位置。

ViewHolder

@Override
    public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.notes_recycler, 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());

        }
    }
}

getData()从notes表中获取数据。

 private List<RowModel> getData() {
        List<RowModel> list = new ArrayList<>();
        Cursor cursor = db.getAllNotes();
        if (cursor.getCount() > 0) {
            cursor.moveToFirst();
            do {
                list.add(new RowModel(cursor.getString(1), cursor.getString(2), cursor.getInt(0)));
                // return list;
            } while (cursor.moveToNext());

        } else {
            Context context = getApplicationContext();
            String text = "No Data";
            int duration = Toast.LENGTH_SHORT;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

        }
        return list;
    }

如果您需要更多信息,请告诉我。如果有人可以帮我解决这个问题,那将会很有帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果你能够使用intent传递ID,那么在详细信息的onstart()中调用此方法和pro

     private void makeDataRequest() {

            String mSelectionClause = YOUR_DATABASE_TABLE._ID + " =?";
            String[] mSelectionArgs = {String.valueOf(your_ID)};

        cursor = getActivity().getContentResolver().query(Contract.CONTENT_URI,null,mSelectionClause,mSelectionArgs ,null);
        if (cursor==null){
            //some error, row is null or empty, handle it here
        }
        else {
            if(cursor.moveToFirst()) {

               //take a model class and store values in it or use it directly
                Model model;
                modelList.clear();
                while (cursor.isAfterLast() == false) {
                    model = new Model();
                    model.setTitle(cursor.getString(cursor.getColumnIndex(YOUR_DATABASE_TABLE.CTITLE)));
                    model.setDesc(cursor.getString(cursor.getColumnIndex(YOUR_DATABASE_TABLE.CDESCRIPTION)));
                    model.setId(cursor.getInt(cursor.getColumnIndex(YOUR_DATABASE_TABLE._ID)));
                    cursor.moveToNext();
                    modelList.add(model);
                }

            }
            else {
                //some error handle it here
            }
        }
    }