2015-10-20 132 views
2

我在我的android項目中創建了一個recyclerView。我有11個項目。每個包含一個imageview和兩個textviews。當我點擊任何項目時,它應該去他們的corressponding activity.How我完成了。以下是我的recyclerView適配器的代碼。請幫助我。android recyclerview項目點擊

RecyclerAdapter.java:

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

/** 
* Created by Sabudaniel61 on 2015-10-15. 
*/ 
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 
    HotelData[] hoteldata;View view; 
    RecyclerAdapter(HotelData[] hoteldata){ 
     this.hoteldata=hoteldata; 
    } 
    @Override 
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerlayout,null); 
     ViewHolder viewHolder = new ViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerAdapter.ViewHolder viewHolder, int i) { 
     viewHolder.imageView.setImageResource(hoteldata[i].getImageUrl()); 
     viewHolder.textView1.setText(hoteldata[i].getHotel()); 
     viewHolder.textView2.setText(hoteldata[i].getPlace()); 


    } 

    @Override 
    public int getItemCount() { 
     return hoteldata.length; 
    } 
    public class ViewHolder extends RecyclerView.ViewHolder{ 
     TextView textView1,textView2;ImageView imageView; 
     public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      textView1=(TextView) itemLayoutView.findViewById(R.id.textView1); 
      textView2=(TextView) itemLayoutView.findViewById(R.id.textView2); 
      imageView=(ImageView) itemLayoutView.findViewById(R.id.imageView1); 


     } 

    } 
} 

回答

1
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     TextView textView1,textView2;ImageView imageView; 
     public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      textView1=(TextView) itemLayoutView.findViewById(R.id.textView1); 
      textView2=(TextView) itemLayoutView.findViewById(R.id.textView2); 
      imageView=(ImageView) itemLayoutView.findViewById(R.id.imageView1); 

      itemLayoutView.setOnClickListener(this); 

     } 
     @Override 
     public void onClick(View v) { 


      Intent intent = new Intent(mContext, ContentDetails.class); 
      itemView.getContext().startActivity(intent); 
     } 
    } 

試試這個

+0

但我有11個項目各由2個textviews和點擊時imageview.Each項目,應去自己的class.I想在上面的代碼時,點擊任何項目不言而喻到ContentDetails類 – jobin

+0

您是否對每個項目使用單獨的類? –

+0

我認爲通過使用職位你可以重定向每個點擊具體活動 –

3

在你RecyclerAdapter做出onclicklistener。

private final OnClickListener mOnClickListener = new MyOnClickListener(); 

@Override 
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int position) { 
    View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerlayout,null); 
    view.setOnClickListener(mOnClickListener); 
    return new MyViewHolder(view); 
} 

的onclick方法:

@Override 
public void onClick(final View view) { 
    int itemPosition = mRecyclerView.getChildPosition(view); 
    String item = mList.get(itemPosition);//if you want to pass the data 
    //Navigate to your desired activity. 
} 

這是最簡單的方法。

1

可以填充recyclerview這樣的:

首先的,在佈局,把一個ID爲的LinearLayout

<LinearLayout 
    android:orientation="horizontal" 
    android:id="@+id/linearView" //add this line 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:id="@+id/imageView1" 
     android:layout_gravity="top" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Text" 
     android:id="@+id/textView1" 
     android:textStyle="bold" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_gravity="top" 
     android:layout_marginLeft="10dp" /> 
</LinearLayout> 

佈局上方將從onCreateViewHolder函數的適配器調用。

然後,請撥打直線佈局您已經在viewHolder類創建:

public class ViewHolder extends RecyclerView.ViewHolder{ 
    TextView textView;ImageView imageView;LinearLayout linearLayout; 
    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     textView1=(TextView) itemLayoutView.findViewById(R.id.textView1); 
     imageView=(ImageView) itemLayoutView.findViewById(R.id.imageView1); 
     linearLayout=(LinearLayout) itemLayoutView.findViewById(R.id.linearView); 
    } 

} 

終於,設置onclicklistener您recyclerview項目是這樣的:

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    //i use arraylist of type Hotel instead of array 
    final Hotel hotel = HotelData.get(position); 

    holder.textView1.setText(hotel.getName()); 
    //if you want to add clicklistener to recyclerview item 
    holder.linearLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //you can call activity here 
     } 
    }); 
    //if you want to add click listener to textview inside recyclerview item 
    holder.textView1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(MainActivity.class,"textview clicked",Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 
0

把一個接口在適配器內部並從活動中調用它:

private ArrayList<Inbox> list; 
private Activity context; 
private onItemClickedListener onItemClickedListener; 

public InboxListAdapter(Activity context, ArrayList<Inbox> list) { 
    this.list = list; 
    this.context = context; 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 

    private ImageView image; 
    private TextView name; 
    private TextView date; 
    private ImageButton btn_play; 
    private ImageButton btn_share; 

    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     image = (ImageView) itemLayoutView.findViewById(R.id.image); 
     name = (TextView) itemLayoutView.findViewById(R.id.name); 
     date = (TextView) itemLayoutView.findViewById(R.id.date); 
    } 
} 

@Override 
public InboxListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                 int viewType) { 

    View itemLayoutView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.row_inbox_list, parent, false); 

    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 

從活動

InboxListAdapter adapter = new InboxListAdapter(getActivity(), list); 
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); 
mRecyclerView.setLayoutManager(layoutManager); 
mRecyclerView.setAdapter(adapter); 
adapter.setOnItemClickedListener(new InboxListAdapter.onItemClickedListener() { 
      @Override 
      public void onItemClicked(Inbox inbox) { 

      } 
     }); 
相關問題