[英]Android RecyclerView how to open new activity from clicking the items
Hello guys, someone can help me to finish this simple project, please? 大家好,有人可以帮我完成这个简单的项目,好吗? I don't know how to configure the click on the items for opening a new activities. 我不知道如何配置要打开新活动的项目的点击。
RecycleViewAdapter.java RecycleViewAdapter.java
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<ModelData> users;
private Context context;
public RecyclerViewAdapter(List<ModelData> users, Context context) {
this.users = users;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.layout_row, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder( ViewHolder holder, int position) {
ModelData user = users.get(position);
holder.nomeUser.setText(user.getName());
holder.userImage.setImageResource(user.getUserImage());
}
@Override
public int getItemCount() {
return users.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView nomeUser;
private ImageView userImage;
public ViewHolder( View itemView) {
super(itemView);
nomeUser = itemView.findViewById(R.id.nomeText);
userImage = itemView.findViewById(R.id.imageView);
context = itemView.getContext();
}
}
ModelData.java ModelData.java
package com.example.aicopolilattico.splashscreen;
import java.security.PublicKey;
public class ModelData {
private String name;
private int userImage;
public ModelData() {}
public ModelData(String name, int userImage ) {
this.name = name;
this.userImage = userImage;
}
public String getName() {
return name;
}
public int getUserImage() {
return userImage;
}
ActivityMain.java ActivityMain.java
package com.example.aicopolilattico.splashscreen;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class ActivityMan extends AppCompatActivity {
private RecyclerView recycleView;
private List<ModelData> users;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activityone);
recycleView = findViewById(R.id.recycleView);
users = new ArrayList<>();
users.add(new ModelData("Jack and Jones", R.drawable.jackcjones111));
users.add(new ModelData("Marlboro", R.drawable.marlb));
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recycleView.setLayoutManager(linearLayoutManager);
recycleView.setAdapter(new RecyclerViewAdapter(users, this));
recycleView.setHasFixedSize(true);
}
Guys is really important. 伙计们真的很重要。 Thanks in advance to have patience and time to give me. 预先感谢您有耐心和时间给我。 :) :)
[ ! [! ! ! ! ! UPDATES ! 更新 ! ! ! ! ! ] ]
I've tried to write the code below, but when I click on the item, it pick up me on the first activity of the app. 我尝试编写下面的代码,但是当我单击该项目时,它会带我进入应用程序的第一个活动。 Advices? 忠告? Thank a lot 非常感谢
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>
{
private List<ModelData> users;
private Context context;
public RecyclerViewAdapter(List<ModelData> users, Context context)
{
this.users = users;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.layout_row, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder( ViewHolder holder, int position)
{
final ModelData user = users.get(position);
holder.nomeUser.setText(user.getName());
holder.userImage.setImageResource(user.getUserImage());
holder.nomeUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context,Photo_Man.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount()
{
return users.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView nomeUser;
private ImageView userImage;
public ViewHolder( View itemView)
{
super(itemView);
nomeUser = itemView.findViewById(R.id.nomeText);
userImage = itemView.findViewById(R.id.imageView);
context = itemView.getContext();
}
}
} }
The best and easiest way to achieve that is sending a listener of that event from the activity to the recyclerview. 最好的和最简单的方法是将事件的侦听器从活动发送到recyclerview。
Something like this... 像这样
Create an interface for listening click events: 创建用于监听点击事件的界面:
public interface OnItemClickListener { void onItemClick(); }
Modify the adapter to receive the listener: 修改适配器以接收侦听器:
private OnItemClickListener listener; public RecyclerViewAdapter(List<ModelData> users, Context context, OnItemClickListener listener ) { this.users = users; this.context = context; this.listener = listener; }
Create listener from activity (From here you can open new activities): 从活动创建侦听器(从此处可以打开新活动):
OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick() { Intent intent = new Intent(ActivityMain.this, NewActivity.class); startActivity(intent); } };
Send that interface to the adapter: 将该接口发送到适配器:
recycleView.setAdapter(new RecyclerViewAdapter(users, this, listener));
Set this listener to the views you want to observe the event: 将此侦听器设置为要观察事件的视图:
@Override public void onBindViewHolder( ViewHolder holder, int position) { ModelData user = users.get(position); holder.nomeUser.setText(user.getName()); holder.userImage.setImageResource(user.getUserImage()); holder.userImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onItemClick(); } }); }
First go to you recyclerview adapter's onBindViewHolder
method. 首先转到您recyclerview适配器的onBindViewHolder
方法。
Then simply add below code. 然后只需添加以下代码。 here itemView
is the particular one item of recyclerview 这里itemView
是recyclerview的特定项目
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// here you go for second activity using intent
Intent intent = new Intent(context, SecondActivity.class); // here you need context from constructor, SecondActivity is another activity
context.startActivity(intent); // this will call the SecondActivity intent
((Activity)context).finish(); // this is for just finish current activity (OPTIONAL, as per requirement)
}
});
if you want to goto activity 如果您想参加活动
holder.nomeUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(context,SomeActivity.class);
context.startActivity(intent);
}
});
if you want to goto fragment 如果你想去片段
holder.nomeUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
FragmentManager manager = ((Activity) context).getFragmentManager();
manager.beginTransaction().replace(R.id.transaction,get_posts).addToBackStack(null).commit();
}
});
can u replace click listener like below code 您可以像下面的代码一样替换Click监听器吗
holder.nomeUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context, Photo_Man.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.