我是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;
}
如果您需要更多信息,请告诉我。如果有人可以帮我解决这个问题,那将会很有帮助。
提前致谢。
答案 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
}
}
}