簡體   English   中英

Android RecyclerView如何通過單擊項目打開新活動

[英]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。

像這樣

  1. 創建用於監聽點擊事件的界面:

     public interface OnItemClickListener { void onItemClick(); } 
  2. 修改適配器以接收偵聽器:

     private OnItemClickListener listener; public RecyclerViewAdapter(List<ModelData> users, Context context, OnItemClickListener listener ) { this.users = users; this.context = context; this.listener = listener; } 
  3. 從活動創建偵聽器(從此處可以打開新活動):

     OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick() { Intent intent = new Intent(ActivityMain.this, NewActivity.class); startActivity(intent); } }; 
  4. 將該接口發送到適配器:

     recycleView.setAdapter(new RecyclerViewAdapter(users, this, listener)); 
  5. 將此偵聽器設置為要觀察事件的視圖:

     @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM