我在回收站 View 中的 itemView 上添加了一个新 Activity ,但我想在单个项目上添加多个 Activity 。这些教程对 Button 来说非常好,但我不知道如何在 itemview 上实现。
MainActivity中调用的recyclerview如下;
private String[] channelnames={"PTC Punjabi","Chakde TV","T-Series Punjabi", "9X Tashan", "Zee Punjabi" };
private int[] channelimages={R.drawable.ptcpunjabi, R.drawable.chakde, R.drawable.tseries, R.drawable.ninex, R.drawable.zeepunjabi};
private List<channel> channelList=new ArrayList<>();
thirdrecyclerView=findViewById(R.id.third_recycler_view);
thirdrecyclerView.setHasFixedSize(true);
channelList=new ArrayList<>();
LinearLayoutManager thirdlinearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
thirdrecyclerView.setLayoutManager(thirdlinearLayoutManager);
for (int i=0;i < channelnames.length;i++){
channel channel=new channel(channelnames[i],channelimages[i]);
channelList.add(channel);
}
适配器和 View 持有者类定义为;public class channeladpater extends RecyclerView.Adapter<channeladpater.Channelviewholder> {
private List<channel> channelList;
Context ctx;
public channeladpater(List<channel> channelList) {
this.channelList = channelList;
this.ctx=ctx;
}
@NonNull
@Override
public Channelviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view,parent,false);
return new Channelviewholder(view);
}
@Override
public void onBindViewHolder(@NonNull Channelviewholder holder, int position)
{
channel channel=channelList.get(position);
holder.channelname.setText(channel.getChannelname());
holder.channelimage.setImageResource(channel.getChannelimage());
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClickListener(View v, int position) {
Intent intent=new Intent(ctx, MainActivity2.class);
ctx.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return channelList.size();
}
public static class Channelviewholder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView channelname;
public CircleImageView channelimage;
ItemClickListener itemClickListener;
Channelviewholder(@NonNull View itemView) {
super(itemView);
this.channelname=itemView.findViewById(R.id.profile_name);
this.channelimage=itemView.findViewById(R.id.profile_image);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
this.itemClickListener.onItemClickListener(v,getLayoutPosition());
}
public void setItemClickListener(ItemClickListener ic){
this.itemClickListener=ic;
}
}
}
在这里,我想将第一个图像或 TextView (PTC punjabi/R.drawable.ptcpunjabi)分配给 MainActivity 2,将第二个 TextView 和 ImageView (Chakde Tv/R.drawable.chakde)分配给 MainActivity 3,依此类推。当单击整张卡片时,如何调用文本或 ImageView 组合到下一个 Activity 开始。MainActivity 2 如下;
public class MainActivity2 extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<VideoDetails> videoDetailsoArrayList;
Intent intent=getIntent();
String API_Key = " ";
String url="https://www.googleapis.com/youtube/v3/search?part=snippet&channelId="+channelID+"&maxResults=50&sort=date&key=[API_KEY]";
com.currentmedia.punjabinews.adapter adapter;
Context ctx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
recyclerView=findViewById(R.id.listView);
videoDetailsoArrayList= new ArrayList<>();
adapter=new adapter(MainActivity2.this,videoDetailsoArrayList);
displayVideos();
}
private void displayVideos ()
{
RequestQueue requestQueue= Volley.newRequestQueue(this);
StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
if (jsonObject1.has("id")){
JSONObject jsonVideoId=jsonObject1.getJSONObject("id");
if (jsonVideoId.has("kind")){
if(jsonVideoId.getString("kind").equals("youtube#video")){
JSONObject jsonObjectSnippet = jsonObject1.getJSONObject("snippet");
JSONObject jsonObjectDefault=jsonObjectSnippet.getJSONObject("thumbnails").getJSONObject("medium");
String video_id=jsonVideoId.getString("videoId");
VideoDetails vd=new VideoDetails();
vd.setVideoId(video_id);
vd.setTitle(jsonObjectSnippet.getString("title"));
vd.setDescription(jsonObjectSnippet.getString("description"));
vd.setUrl(jsonObjectDefault.getString("url"));
videoDetailsoArrayList.add(vd);
}
// recyclerView.setAdapter(adapter);
// adapter.notifyDataSetChanged();
}
}
}
}catch (JSONException e) {
e.printStackTrace();
}
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
adapter= new adapter(getApplicationContext(),videoDetailsoArrayList);
recyclerView.setAdapter(adapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),error.getMessage(), LENGTH_LONG).show();
}
});
requestQueue.add(stringRequest);
}
在字符串 url 中,我想添加 channel ID 获取 的列表 channel 名 , 避免添加多个 Activity 。PTC punjabi
UCHJW1_0oPzYZl89wX_jhrgA
Chakde Tv
UCaT-WGdJLyEDnxZPAKRTbqQ
T-series punjabi
UCJMSoNjSKRARSIJM3GymRjQ
9x tashan
UCrET5fR2NAUTO2Xp12G0l8A
zee punjabi
UCYF_LfBBxkFBEgaSCNrqW3w
上面提到的是我要分配给它们的 channel ID 列表,这样当从 MAin Activity 中选择每个图像时,单独的 channel Activity 就会开始。
最佳答案
如果列表中有 10 个项目,则无需为每个项目创建 10 个 Activity 。
您只需要一个相同的 Activity 来显示 MainActivity 列表中的详细信息。
当您按下列表中的项目时,您需要传递它的position
和数据( channel
在你的情况下)到 SecondActivity 使用 Intents
.
因此,让我们进行这些更改。
在您的适配器类中:
您已经设置了监听器,但请确保您正在传递数据。
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClickListener(View v, int position) {
Intent intent = new Intent(ctx, MainActivity2.class);
// Using intent pass your data to MainActivity2 class
intent.putExtra("Intent to MainActivity2", channel);
ctx.startActivity(intent);
}
});
MainActivity2 类:现在您必须从以前的 Activity 中接收数据。
在您的
onCreate()
在扩展布局之后和设置任何 View 之前的 Activity 。Channel channel = getIntent().getParcelableExtra("Intent to MainActivity2");
从上面的代码中,您正在获取此 Intent 所接收到的数据,您也可能从任何 Activity 中接收到数据,因此具体来自您使用 String
引用的 Activity 里面 getParcelableExtra()
现在获取数据后,以这种方式调用它的属性yourTextView.setText(channel.channelname)
而已。现在您可以看到单击先前 Activity 列表中的每个项目,不再需要额外的 Activity 。供您引用,您可以查看 project遵循类似的方法。
关于android - 在 RecyclerView 项目上添加多个 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63947092/