0

更新:あまりにも曖昧だったので私の元の質問を改訂しました。setOnClickListener - onClickの<?>を渡す方法

私はRecyclerViewを実装しましたが、各アイテムをクリック可能にしたいので、アイテムをクリックするとDetailsActivity(電話機とタブレット用)に移動し、そのアイテムに関する詳細を調べることができます。

私が持っていたのは、mGridView.setOnItemClickListenerを呼び出すグリッドビューだったので、私はrecyclerviewを実装する前にこれを行うことができました。私はRecyclerviewは、このメソッドを持っていないとして、私は長く、mGridView.setOnItemClickListenerを呼び出すことはできませんように見えるrecyclerview持っていることを今

public class BookFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { 

    .... 
    ..... 

    public interface CallbackInterface { 
     /** 
     * DetailFragmentCallback for when an item has been selected. 
     */ 
     public void onItemSelected(Uri bookUri); 
    } 


    .... 
    ..... 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     final View rootView = inflater.inflate(R.layout.fragment_main, container, false); 


     // initialize our BookAdapter 
     mBookAdapter = new BookAdapter(getActivity(), null, 0, CURSOR_LOADER_ID); 
     // initialize mGridView to the GridView in fragment_main.xml 
     mGridView = (GridView) rootView.findViewById(R.id.Book_grid); 
     // set mGridView adapter to our CursorAdapter 
     mGridView.setAdapter(mBookAdapter); 

     // make each item clickable 
     mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       int uriId = position + 1; 

       Uri uri = ContentUris.withAppendedId(BookContentProvider.Book.CONTENT_URI, 
         uriId); 

       Cursor cursor = (Cursor) parent.getItemAtPosition(position); 
       if (cursor != null) { 

        ((CallbackInterface) getActivity()) 
          .onItemSelected(BookContentProvider.Book.withId(cursor.getLong(0))); // getlong(0) gets the row ID 
       } 
      } 
     }); 


     return rootView; 
    } 
..... 

} 

:ここ

はrecyclerview前のコードです。返信用

public class BookCursorAdapter extends CursorRecyclerViewAdapter<BookCursorAdapter.ViewHolder> { 

    private static final String LOG_TAG = BookCursorAdapter.class.getSimpleName(); 
    private static Context mContext; 
    private ViewHolder mVh; 


    public BookCursorAdapter(Context context, Cursor cursor) { 
     super(context, cursor); 
     mContext = context; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     public final View mView; 
     public final ImageView imageView; 

     public ViewHolder(View view) { 
      super(view); 

      mView = view; 
      imageView = (ImageView) view.findViewById(R.id.list_item_book_imageview); 

     } 

    } 


    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.list_item_Book, parent, false); 
     ViewHolder vh = new ViewHolder(itemView); 
     mVh = vh; 
     return vh; 
    } 


    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) { 

     DatabaseUtils.dumpCursor(cursor); 

     int imageIndex = cursor.getColumnIndex(BookColumns.COLUMN_IMAGEPATH); 
     String image = cursor.getString(imageIndex); 
     if (image != null) { 
      Picasso.with(viewHolder.imageView.getContext()) 
        .load("http://image.tmdb.org/t/p/w400/" + image) 
        .resize(600, 800) 
        .centerCrop() 
        .into(viewHolder.imageView); 
     } 


    } 

} 

答えて

1
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.VH> { 

private Cursor cursor; 

public MyAdapter(Cursor c) { 
    cursor = c; 
} 

// View Holder 
public static class VH extends RecyclerView.ViewHolder { 

    public TextView _textView; 
    public ImageView _icon; 

    public VH(View v) { 
     super(v); 
     _textView = (TextView) v.findViewById(android.R.id.text1); 
     _icon = (ImageView) v.findViewById(android.R.id.icon); 
    } 

} 


@Override 
public MyAdapter.VH onCreateViewHolder(ViewGroup parent, int viewType) { 
    // inflate the layout and create a new ViewHolder with it. 
    final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    final View v = inflater.inflate(R.layout.baseitem, parent, false); 
    return new VH(v); 
} 

@Override 
public void onBindViewHolder(final VH holder, int position) { 
    // This is called whenever the RecyclerView needs to bind data to the viewholders. 
    // This will happen continuously whilst scrolling. 
    // Viewholders scrolled off screen are likely to be reused. 
    // so make sure you reset any values in it to the defaults. 

    cursor.moveToPosition(position); 

    holder._textView.setText(cursor.getString(cursor.getColumnIndex("MyStringData"))); 
    holder._icon.setImageResource(R.drawable.icv_arrow_up); 

    holder._icon.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.i("TAG", holder._textView.getText().toString() + " was pressed"); 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return cursor.getCount(); 
} 

} 
+0

こんにちは@Kuffs感謝:

はここに私のコードBookCursorAdapterである:それは私がsetOnClickListenerを呼び出すことができますが、私は、私は私のBookCursorAdapterでそれを実装することができますかわからないように見えます。私は現在、どのように私は、このような私のonBindViewHolderメソッドでカーソルに渡しているように私はそれを行うことができません:public void onBindViewHolder(ViewHolder viewHolder、Cursor cursor){ DatabaseUtils.dumpCursor(cursor); int imageIndex = cursor.getColumnIndex(BookColumns.COLUMN_IMAGEPATH); 文字列イメージ= cursor.getString(imageIndex); } } –

+0

私の回答は一例です。特定のニーズに合わせて調整します。私のポイントは、リスナーを間違った場所に置いていることでした。 – Kuffs

+0

ありがとう@Kuffs。ちょうどあなたの提案を実装しようとしたが、私はまだカーソルを返す方法を見つけることができないので、私は少し損失です。私の前のコードと同じように、私はparent.getItemAtPositionを次のように呼び出してbcauseを返します。Cursor cursor =(Cursor)parent.getItemAtPosition(getAdapterPosition()); –

関連する問題