2016-09-07 8 views
0

私はAndroidを初めて使用し、簡単なノートアプリケーションを構築して使い始めます。私はthisライブラリを使用してrecyclerlerviewを実装することができました。SQLiteの値onClick recyclerviewを使用して別のアクティビティの詳細を表示する方法

recyclerviewは、タイトルと簡単な説明を表示するノートのリストです。ユーザーがリスト内の行をクリックすると、別のアクティビティが開き、メモの内容が表示されます。

これを行うには、id(SQLite DBのプライマリキー)を取得し、intent.putExtraを使用して詳細アクティビティに渡す必要があります。

このメソッドは、recyclerviewのクリックイベントを処理するアクティビティのonCreateにあります。

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()リアクションテーブルからデータを取得します。

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; 
    } 

さらに詳しい情報が必要な場合はお知らせください。誰かがこの問題を解決するのを手助けできるなら、大きな助けになるでしょう。

ありがとうございます。私はちょうどonRowClicked方法でクリックした行のIDにアクセスしたいの詳細アクティビティコールの

答えて

0

あなたは(ONSTARTで、その後の意図を使用してIDを渡すことができる場合)、このメソッドとプロ

 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 
      } 
     } 
    } 
+0

。今私はその位置を取得し、トーストとしてそれを示すことができます。 IDのID(SQLiteのプライマリキー)を取得して、IDを使用してSQLiteから詳細を取得する別のアクティビティに送信すると便利です。 – Aksh

+0

あなたのonClick()で次のようにしてください: onRowClicked(int position){ String rowId = rowModelList.getID(position); // start here intent –

+0

nullpointerのエラーを返す – Aksh

関連する問題