从回收站适配器的单击功能传递数据

亚娜·巴布(Jana babu)
 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对象中,我正在获取项目点击的数据,当我尝试在通知活动中使用此数据时,我没有仅获得一个值。或建议我其他解决方案

这是我的通知活动

 notif data = (notif)getIntent().getExtras().getSerializable("DATA");
    title=data.getTitle();
    tim=data.gettimestamp();
    msg=data.getmsg();
吉涅什·贾恩(Jignesh Jain)

您需要为此实现接口。在您的适配器类中,在Holder构造函数中编写以下代码

itemView.setClickable(true);
itemView.setOnClickListener(this);

现在将OnClickListener实现到Holder类。这样做时,您将获得onClick方法。

@Override
public void onClick(View v) {
if (itemClick != null) {
    itemClick.onItemClicked(getPosition());
    }
}

创建一个接口类作为OnItemClick

public interface OnItemClick {
    public void onItemClicked(int position);
}

并在您的适配器类中创建其对象,并生成其getter / setter方法。

现在,在“活动”中,在将您的RecyclerView与适配器绑定下,编写以下代码:

adapter.setItemClick(this);

在执行此操作时,系统将要求您将OnItemClick实施到您的Activity中。在实现onItemClicked时,您将能够执行click事件。

@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

<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外部库添加到您的项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

回收站适配器未显示数据

回收站适配器未设置某些数据

Android:通过Android数据绑定将Lambda传递给回收站适配器

将值从回收站适配器传递到android中的片段

更换回收站适配器中的碎片

循环在火力地堡回收站适配器

旋转器和回收站的通用适配器

从回收站视图的适配器内重新加载回收站视图

如何将数据从回收站适配器发送到片段 如何从Recyclerview适配器调用片段函数

在回收站视图中显示我的数据时出错:RecyclerView:未连接适配器;跳过布局

使用多个 api 请求和一个适配器将数据显示到回收站视图中

创建基础适配器适用于所有回收站查看适配器

滚动时如何使用回收站视图识别节适配器的子项的位置

在回收站适配器中调用getItemCount和getItemViewType方法时

如何实现火力地堡回收站适配器的Android 3.1及更高更新的版本?

从活动中删除回收站适配器后如何刷新它

从活动中删除回收站适配器后如何刷新它

将适配器设置为回收站视图时,出现空指针异常

Android:如何在回收站布局适配器中动态填充片段?

如何在回收站适配器类中使用getcontext()?

如何从回收站适配器调用包含onclicklistener的对话框

想要在片段中使用回收站视图。设置适配器时显示适配器,显示错误

没有显示回收站视图。即使我已连接适配器,也将错误显示为“未连接适配器,正在跳过布局”

片段中的回收站适配器在第一次实例化时返回null

在Android客户端中获取socket.io响应,但不了解如何在回收站适配器中实现响应

回收视图不显示来自适配器的数据

回收站视图单击动画

如何实现“回收站”功能?

安卓。Java。回收适配器