从我的回收站适配器的单击功能传递数据 [英] passing data from on click function of my recycler adaptor
问题描述
public void onClick(View v) {
Intent intent = new Intent(context,notification.class);
Bundle bundle = new Bundle();
bundle.putSerializable("DATA",listmsgs.get(getPosition()));
intent.putExtras(bundle);
context.startActivity(intent);
}
在bundle对象中,我正在获取项目点击的数据,当我尝试在通知活动中使用此数据时,我不会仅获得一个值.或建议我其他解决方案
in the bundle object i'm getting data of item click and when i'm trying to use this data in notification activity i'm not getting data only one value im getting. or suggest me any another solution
这是我的通知活动
notif data = (notif)getIntent().getExtras().getSerializable("DATA");
title=data.getTitle();
tim=data.gettimestamp();
msg=data.getmsg();
推荐答案
您需要为此实现Interface.在您的适配器类中,在Holder构造函数中编写以下代码
You need to implement Interface for this. In your adapter class, write below code in the Holder constructor
itemView.setClickable(true);
itemView.setOnClickListener(this);
现在将OnClickListener实现到Holder类.完成此操作后,您将获得onClick方法.
Now implement OnClickListener to your Holder class. On doing this you will get onClick method.
@Override
public void onClick(View v) {
if (itemClick != null) {
itemClick.onItemClicked(getPosition());
}
}
将一个接口类创建为OnItemClick
Create one interface class as OnItemClick
public interface OnItemClick {
public void onItemClicked(int position);
}
并在您的适配器类中创建其对象,并生成其getter/setter方法.
And create its object in your adapter class and generate its getter/setter methods too.
现在,在活动"中,在将RecyclerView与适配器绑定下,编写以下代码:
Now in your Activity, write below code under binding your RecyclerView with Adapter:
adapter.setItemClick(this);
执行此操作时,系统将要求您将OnItemClick实施到您的Activity中.实施onItemClicked后,您将可以执行点击事件.
On doing this you will be asked to implement OnItemClick to your Activity. On implementing onItemClicked, you will be able to perform click event.
@Override
public void onItemClicked(int position) {
Intent intent = new Intent(context,notification.class);
Bundle bundle = new Bundle();
bundle.putSerializable("DATA",listmsgs.get(position));
intent.putExtras(bundle);
startActivity(intent);
}
这是完整的代码:
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnItemClick {
private List<Person> persons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeData();
RecyclerView rv = (RecyclerView)findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(this));
RVAdapter adapter = new RVAdapter(persons);
rv.setAdapter(adapter);
adapter.setItemClick(this);
}
private void initializeData() {
persons = new ArrayList<>();
persons.add(new Person("Emma Wilson", "23 years old", R.drawable.ic_launcher));
persons.add(new Person("Lavery Maiss", "25 years old", R.drawable.ic_launcher));
persons.add(new Person("Lillie Watts", "35 years old", R.drawable.ic_launcher));
persons.add(new Person("Emma Wilson", "23 years old", R.drawable.ic_launcher));
persons.add(new Person("Lavery Maiss", "25 years old", R.drawable.ic_launcher));
persons.add(new Person("Lillie Watts", "35 years old", R.drawable.ic_launcher));
persons.add(new Person("Emma Wilson", "23 years old", R.drawable.ic_launcher));
persons.add(new Person("Lavery Maiss", "25 years old", R.drawable.ic_launcher));
persons.add(new Person("Lillie Watts", "35 years old", R.drawable.ic_launcher));
persons.add(new Person("Emma Wilson", "23 years old", R.drawable.ic_launcher));
persons.add(new Person("Lavery Maiss", "25 years old", R.drawable.ic_launcher));
persons.add(new Person("Lillie Watts", "35 years old", R.drawable.ic_launcher));
}
@Override
public void onItemClicked(int position) {
Toast.makeText(getBaseContext(), ""+persons.get(position).name, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,Demo.class);
Bundle bundle = new Bundle();
bundle.putSerializable("DATA",persons.get(position));
intent.putExtras(bundle);
startActivity(intent);
}
}
适配器类:
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
List<Person> persons;
private OnItemClick itemClick;
public class PersonViewHolder extends RecyclerView.ViewHolder implements
OnClickListener {
CardView cv;
TextView personName, personAge;
ImageView personPhoto;
PersonViewHolder(View itemView) {
super(itemView);
itemView.setClickable(true);
itemView.setOnClickListener(this);
cv = (CardView) itemView.findViewById(R.id.cv);
personName = (TextView) itemView.findViewById(R.id.person_name);
personAge = (TextView) itemView.findViewById(R.id.person_age);
personPhoto = (ImageView) itemView.findViewById(R.id.person_photo);
}
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
if (itemClick != null) {
itemClick.onItemClicked(getPosition());
}
}
}
public RVAdapter(List<Person> persons) {
this.persons = persons;
}
@Override
public int getItemCount() {
return persons.size();
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int pos) {
personViewHolder.personName.setText(persons.get(pos).name);
personViewHolder.personAge.setText(persons.get(pos).age);
personViewHolder.personPhoto.setImageResource(persons.get(pos).photoId);
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int arg1) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.item, viewGroup, false);
PersonViewHolder holder = new PersonViewHolder(view);
return holder;
}
public OnItemClick getItemClick() {
return itemClick;
}
public void setItemClick(OnItemClick itemClick) {
this.itemClick = itemClick;
}
}
模型类:
import java.io.Serializable;
@SuppressWarnings("serial")
public class Person implements Serializable {
String name;
String age;
int photoId;
Person(String name, String age, int photoId) {
this.name = name;
this.age = age;
this.photoId = photoId;
}
}
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Demo extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person person = (Person) getIntent().getExtras()
.getSerializable("DATA");
Log.e("", "===== " + person.name);
}
}
xml文件:
activity_main.xml
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp" >
<android.support.v7.widget.CardView
android:id="@+id/cv"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<ImageView
android:id="@+id/person_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:contentDescription="@string/app_name" />
<TextView
android:id="@+id/person_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/person_photo"
android:layout_toRightOf="@+id/person_photo"
android:textSize="30sp" />
<TextView
android:id="@+id/person_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/person_name"
android:layout_toEndOf="@+id/person_photo"
android:layout_toRightOf="@+id/person_photo" />
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
将recyclerview和cardview外部库添加到您的项目中.
Add recyclerview and cardview external libs to your project.
这篇关于从我的回收站适配器的单击功能传递数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!