Как открыть другое действие для элемента recyclerView onclick
Я использую recyclerView
, чтобы показать мой listitems
в navigation drawer
. Я реализовал onclickListener
, но я застрял в том, как открыть другой activity
, когда элементы clicked
. Все мои объекты делают на клике на данный момент, поскольку код должен отображать toast
с помощью item position
.
Буду признателен за помощь.
AdapterClass.java
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder> {
private LayoutInflater inflater;
private Context context;
List<Information>data= Collections.emptyList();
public AdapterClass(Context context,List<Information>data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= inflater.inflate(R.layout.custom_row,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current=data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconId);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title=(TextView)itemView.findViewById(R.id.listText);
icon=(ImageView)itemView.findViewById(R.id.listIcon);
itemView.setClickable(true);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(context,"The Item Clicked is: "+getPosition(),Toast.LENGTH_SHORT).show();
}
};
}
Ответы
Ответ 1
Вы можете (но не нужно, потому что класс ViewHolder
не является статическим) создать контекст поля, как показано ниже:
private final Context context;
public MyViewHolder(View itemView) {
super(itemView);
context = itemView.getContext();
...
}
а в вашем методе onClick
просто вызовите sth, как показано ниже:
@Override
public void onClick(View v) {
final Intent intent;
switch (getAdapterPostion()){
case 0:
intent = new Intent(context, FirstActivity.class);
break;
case 1:
intent = new Intent(context, SecondActivity.class);
break;
...
default:
intent = new Intent(context, DefaultActivity.class);
break;
}
context.startActivity(intent);
}
или же
@Override
public void onClick(View v) {
final Intent intent;
if (getAdapterPosition() == sth){
intent = new Intent(context, OneActivity.class);
} else if (getPosition() == sth2){
intent = new Intent(context, SecondActivity.class);
} else {
intent = new Intent(context, DifferentActivity.class);
}
context.startActivity(intent);
}
Ответ 2
вы можете реализовать свой адаптер onClickListener:
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder>implements View.OnClickListener
и использовать интерфейс с методом в нем
public interface mClickListener {
public void mClick(View v, int position);
}
и в вашем методе onClick вызовите метод в интерфейсе и передайте ему вид и позицию
в вашем основном мероприятии реализуйте этот интерфейс
public class MainActivity extends ActionBarActivity implements AdapterClass.mClickListener
и переопределить этот метод
@Override
public void onCommentsClick(View v, int position) {
final Intent intent = new Intent(this, OtherActivity.class);
}
так как лучше управлять переходом вашей активности не на другие классы
Ответ 3
Этот вопрос задавался давно, в любом случае я бы написал простой ответ, может, он кому-нибудь поможет.
Самый простой способ прикрепить clickListener к элементам RecyclerView находится внутри Адаптера, как показано ниже:
public class MyAdapter extends RecyclerView.Adapter<AdapterClass.MyViewHolder> {
....
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), YourActivity.Class);
startActivity(intent);
}
});
}
Ответ 4
Просто вы можете сделать это легко... Вам просто нужно получить контекст своей деятельности, здесь, из вашего представления.
//Create intent getting the context of your View and the class where you want to go
Intent intent = new Intent(view.getContext(), YourClass.class);
//start the activity from the view/context
view.getContext().startActivity(intent); //If you are inside activity, otherwise pass context to this funtion
Помните, что вам нужно изменить AndroidManifest.xml и поместить активность...
<activity
android:name=".YourClass"
android:label="Label for your activity"></activity>
Ответ 5
-
Пример, в MyRecyclerViewAdapter, добавьте метод:
public interface ItemClickListener {
void onItemClick(View view, int position);
}
-
В MainActivity.java
@Override
public void onItemClick(View view, int position) {
Context context=view.getContext();
Intent intent=new Intent();
switch (position){
case 0:
intent = new Intent(context, ChildActivity.class);
context.startActivity(intent);
break;
}
}
Ответ 6
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder> {
private LayoutInflater inflater;
private Context context;
List<Information>data= Collections.emptyList();
public AdapterClass(Context context,List<Information>data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= inflater.inflate(R.layout.custom_row,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current=data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconId);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title=(TextView)itemView.findViewById(R.id.listText);
icon=(ImageView)itemView.findViewById(R.id.listIcon);
itemView.setClickable(true);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(context,"The Item Clicked is: "+getPosition(),Toast.LENGTH_SHORT).show();
}
};
}
Ответ 7
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<Android> android;
Context context;
private ImageView img;
public DataAdapter(Context contextN, ArrayList<Android> android) {
this.android = android;
this.context=contextN;
}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_list, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {
viewHolder.tv_name.setText(android.get(i).getOffer());
viewHolder.tv_version.setText(android.get(i).getOfferType());
Picasso.with(context).load(android.get(i).getImg()).transform(new CircleTransform()).into(img);
}
@Override
public int getItemCount() {
return android.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv_name,tv_version,tv_api_level;
public ViewHolder(View view) {
super(view);
tv_name = (TextView)view.findViewById(R.id.tv_name);
tv_version = (TextView)view.findViewById(R.id.tv_version);
img = (ImageView) view.findViewById(R.id.img);
context = itemView.getContext();
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int itemPosition = getLayoutPosition();
Toast.makeText(context, "" + itemPosition, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context,Show.class);
intent.putExtra("name",""+android.get(itemPosition).getOffer());
intent.putExtra("img",""+android.get(itemPosition).getImg());
context.startActivity(intent);
}
});
}
}
}
Ответ 8
iconView = (ImageView) itemLayoutView.findViewById(R.id.iconId);
itemLayoutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), SecondPage.class);
v.getContext().startActivity(intent);
Toast.makeText(v.getContext(), "os version is: " + feed.getTitle(), Toast.LENGTH_SHORT).show();
}
});