weixin_43964027
穿胖次的夏雨来
采纳率20%
2018-12-23 22:26

RecyclerView中点击item跳转到其他Activity并显示item内容如何实现?

适配器代码

package com.example.uilayout.adapter;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.uilayout.R;
import com.example.uilayout.model.Msg;

import java.util.List;

/**
 * Created by 夏雨来 on 2018/11/20.
 */

public class MsgListAdapter extends RecyclerView.Adapter<MsgListAdapter.viewHolder> {
    private List<Msg> msgList;


    //1、创建构造函数
    //构造函数参数是list的集合,他是rv直接的数据来源
    //在做Adapter实例化的时候必须传入list的集合数据
    public MsgListAdapter(List<Msg> msgList) {
        this.msgList = msgList;
    }



    //2、创建类ViewHolder(视图容器),承载的是条目中的控件
    //做条目中控件的声明和绑定
    class viewHolder extends RecyclerView.ViewHolder{
        ImageView iv_head;
        TextView tv_friend;
        TextView tv_message;
        TextView tv_time;
        View itemView;
        public viewHolder(View itemView) {
            super(itemView);
            //itemView的值由一步一步传递过来的
            this.itemView=itemView;
            iv_head=itemView.findViewById(R.id.iv_head);
            tv_friend=itemView.findViewById(R.id.tv_friend);
            tv_message=itemView.findViewById(R.id.tv_message);
            tv_time=itemView.findViewById(R.id.tv_time);
        }
    }
    //创建ViewHolder对象
    //
    @Override

    public viewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View itemView = View.inflate(viewGroup.getContext(),R.layout.item_msglist,null);
        viewHolder holder=new viewHolder(itemView);
        return holder;
    }
    //给ViewHolder中的控件设置数据

    @Override
    public void onBindViewHolder(final viewHolder viewHolder, final int i) {
        final Msg msg = msgList.get(i);
        viewHolder.iv_head.setImageResource(msg.getImage_head());
        viewHolder.tv_friend.setText(msg.getFriend());
        viewHolder.tv_message.setText(msg.getMessage());
        viewHolder.tv_time.setText(msg.getTime());

            //设置条目中的点击监听
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(view.getContext(), "你想与" + msg.getFriend() + "聊天", Toast.LENGTH_SHORT).show();
//                TextView friendView=view.findViewById(R.id.tv_friend);
//                Intent intent=new Intent();
//                Intent intent=new Intent(mContext,ChatActivity.class);
//                intent.putExtra("friend",msg.getFriend().toString());
//                mContext.startActivity(intent);


                }
            });
            //设置条目中具体控件的点击监听
//        viewHolder.iv_head.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Toast.makeText(view.getContext(), "你点击了"+msg.getFriend()+"头像", Toast.LENGTH_SHORT).show();
//            }
//        });

        }

    @Override
    public int getItemCount() {
        return msgList.size();
    }
}

Activity代码

package com.example.uilayout.activity;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import com.example.uilayout.model.Msg;
import com.example.uilayout.adapter.MsgListAdapter;
import com.example.uilayout.R;
import com.example.uilayout.utils.MySQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class MsgListActivity extends AppCompatActivity {
    RecyclerView rv;
    List<Msg> msgList = new ArrayList<>();
//    TextView friend;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_msglist);
        rv = findViewById(R.id.rv);
//        friend =findViewById(R.id.tv_friend);
        //给rv设置线性布局
        rv.setLayoutManager(new LinearLayoutManager(this));
        //初始化List集合数据
//        initList(msgList);
        initListFromDB();
        //给rv设置适配器
        rv.setAdapter(new MsgListAdapter(msgList));

//        MySQLiteOpenHelper helper=new MySQLiteOpenHelper(this,"wechat",null,1);
//        SQLiteDatabase db=helper.getWritableDatabase();



    }


    public void initListFromDB() {
        MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this, "wechat", null, 1);
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.query("msg", null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            int headImageSrc = cursor.getInt(cursor.getColumnIndex("headImageSrc"));
            String friend = cursor.getString(cursor.getColumnIndex("friend"));
            String message = cursor.getString(cursor.getColumnIndex("message"));
            String time = cursor.getString(cursor.getColumnIndex("time"));

            Msg msg = new Msg(headImageSrc, friend, message, time);
            msgList.add(msg);
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:descendantFocusability="blocksDescendants"
    >
    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/a"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:onClick="click"
        />
    <TextView
        android:id="@+id/tv_friend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="小张"
        android:textSize="20sp"
        android:textColor="#000"
        android:layout_toRightOf="@+id/iv_head"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:onClick="click"
        />
    <TextView
        android:id="@+id/tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你在干嘛"
        android:textSize="15sp"
        android:lines="1"
        android:layout_alignLeft="@+id/tv_friend"
        android:layout_marginTop="40dp"
        android:onClick="click"
        />
    <TextView
        android:id="@+id/tv_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="21:00"
        android:textSize="15sp"
        android:layout_alignTop="@+id/tv_friend"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:onClick="click"
        />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#C0C0C0"
        android:layout_alignLeft="@+id/iv_head"
        android:layout_alignRight="@+id/tv_time"
        android:layout_marginTop="74dp"
        />



</RelativeLayout>

未跳转时界面
未跳转时界面
效果,点击item跳转到另一个界面之后,界面显示与XX聊天,XX是由item中获取的
效果,点击item跳转到另一个界面之后,界面显示与XX聊天,XX是由item中获取的

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • csdn635406113 就知道你会选我 3年前

    RecyclerView中点击item跳转到其他Activity并显示item内容如何实现?
    分开来讲:
    1,RecyclerView中点击item,看代码你已经实现了。
    2,跳转到其他Activity,看代码你也已经实现了。
    3,跳转到其他Activity并显示item内容(数据处理)
    // Intent intent=new Intent();
    // Intent intent=new Intent(mContext,ChatActivity.class);
    // intent.putExtra("friend",msg.getFriend().toString());
    // mContext.startActivity(intent);
    我看到有这样一段代码,这段代码的功能就是给intent put了一个key为"friend"的String,你的msg.getFriend()应该是个对象
    (如果是个String就不用再toString()了),但是你这个msg.getFriend().toString(),所表现的意图应该是将这个对象传递进去,
    但是你用toString()函数来作为String的具体内容,你传递过去后即便是可以接收到(通过getIntent().getExrea("friend",..)的方式),
    也是很难解析的,所以你的问题应该就是这个数据的传递和解析的过程。
    这里可以给你3个思路,
    a.还是利用intent,只不过将msg.getFriend()这个对象获取到,然后将里面的值一个一个的通过intent.putExtra(...)的方式传递过去,
    再在那边通过getIntent().getExrea(...)的方式获取再读取。
    b.直接将msg.getFriend()对象序列化(两种方式可以自行百度),然后还是可以通过ntent.putExtra(...)的方式传递过去,在那边就可以
    通过getIntent().getParcelableExtra();/getIntent().getSerializableExtra()两种方式之一获取(取决于你的序列化方式)。
    c.通过Gson等Json数据处理框架将对象序列化转换为String后,以第a方式的String类型传递过去,再在那边使用Gson进行String转对象的
    操作进行反序列化即可。
    4,跳转到其他Activity并显示item内容(界面处理)
    有了上一步的数据之后,显示就很简单了。
    5,另外的方式:以单例或静态修饰或者持久化等方式,使两个Activity能共同访问的统一资源,也能够实现同样的效果,只不过一般来讲
    还是上面的intent数据传递比较规范一些,具体原因就不解释了。

    点赞 1 评论 复制链接分享
  • zyw0101 孤独的冥王星 3年前

    adapter的构造方法加个参数Context,将activity带进来,至于如何跳转,你的onclick方法中注释掉的就是了

    点赞 评论 复制链接分享
  • qq_40691180 FrankGGG 2年前

    你是如何实现不同的item来展示不同的好友,你的布局文件已经定义了指定text 而且没有循环你如何使item重复展示的?求大佬指点

    点赞 评论 复制链接分享
  • ziyejinwei1994 ziyejinwei1994 3年前

    RecyclerView的条目点击事件,获取到当前点击条目的信息,然后跳转的时候带参数,到新界面读取就行了

    点赞 评论 复制链接分享
  • qq_40442449 大佬轻喷 1月前

    重点就是v.getcontext

     

    点赞 评论 复制链接分享
  • L_hbnb 风棘子 1年前

    我按你的代码写完为什么界面转不了?程序自动停止运行。。。

    点赞 评论 复制链接分享

相关推荐