从我的回收站适配器的单击功能传递数据 [英] passing data from on click function of my recycler adaptor

查看:93
本文介绍了从我的回收站适配器的单击功能传递数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆