问题
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);
}
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
this is my notification activity
notif data = (notif)getIntent().getExtras().getSerializable("DATA");
title=data.getTitle();
tim=data.gettimestamp();
msg=data.getmsg();
回答1:
You need to implement Interface for this. In your adapter class, write below code in the Holder constructor
itemView.setClickable(true);
itemView.setOnClickListener(this);
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());
}
}
Create one interface class as OnItemClick
public interface OnItemClick {
public void onItemClicked(int position);
}
And create its object in your adapter class and generate its getter/setter methods too.
Now in your Activity, write below code under binding your RecyclerView with Adapter:
adapter.setItemClick(this);
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);
}
Here is the complete code:
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);
}
}
Adapter class:
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;
}
}
Model class:
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 files:
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>
Add recyclerview and cardview external libs to your project.
来源:https://stackoverflow.com/questions/32323548/passing-data-from-on-click-function-of-my-recycler-adaptor