[英]Android RecyclerView how to open new activity from clicking the items
大家好,有人可以幫我完成這個簡單的項目,好嗎? 我不知道如何配置要打開新活動的項目的點擊。
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
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
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);
}
伙計們真的很重要。 預先感謝您有耐心和時間給我。 :)
[! ! ! 更新 ! ! ! ]
我嘗試編寫下面的代碼,但是當我單擊該項目時,它會帶我進入應用程序的第一個活動。 忠告? 非常感謝
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();
}
}
}
最好的和最簡單的方法是將事件的偵聽器從活動發送到recyclerview。
像這樣
創建用於監聽點擊事件的界面:
public interface OnItemClickListener { void onItemClick(); }
修改適配器以接收偵聽器:
private OnItemClickListener listener; public RecyclerViewAdapter(List<ModelData> users, Context context, OnItemClickListener listener ) { this.users = users; this.context = context; this.listener = listener; }
從活動創建偵聽器(從此處可以打開新活動):
OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick() { Intent intent = new Intent(ActivityMain.this, NewActivity.class); startActivity(intent); } };
將該接口發送到適配器:
recycleView.setAdapter(new RecyclerViewAdapter(users, this, listener));
將此偵聽器設置為要觀察事件的視圖:
@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(); } }); }
首先轉到您recyclerview適配器的onBindViewHolder
方法。
然后只需添加以下代碼。 這里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)
}
});
如果您想參加活動
holder.nomeUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(context,SomeActivity.class);
context.startActivity(intent);
}
});
如果你想去片段
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();
}
});
您可以像下面的代碼一樣替換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.