通过adapter打开的activity如何返回数据给上一个activity

时间:2022-05-09 23:41:32
具体是使用recyclerview,点击具体Item通过adapter中的点击监听事件用intent打开具体item信息的activity,但从这个具体信息的activity返回时,需要返回一个数据设置该条item已读。通过adapter打开的实在不知道怎么返回数据到activity中,求大神讲解一下,刚刚入门,查了很久都没找到解决方法,谢谢! 通过adapter打开的activity如何返回数据给上一个activity
adapter代码如下

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {


    private List<News> mNewsList;

    static class ViewHolder extends RecyclerView.ViewHolder{
        View newsView;
        ImageView newsImage;
        TextView newsTitle;
        TextView newsResource;
        TextView newsDate;
        TextView newsDetail;
        public ViewHolder(View view)
        {
            super(view);
            newsView=view;
            newsImage=(ImageView) view.findViewById(R.id.news_image);
            newsTitle=(TextView)view.findViewById(R.id.news_title);
            newsDate=(TextView)view.findViewById(R.id.news_date);
            newsResource=(TextView)view.findViewById(R.id.news_resource);
            newsDetail=(TextView)view.findViewById(R.id.detail_context);


        }
    }

    public NewsAdapter(List<News> newsList)
    {
        mNewsList=newsList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);
        final Context context=parent.getContext();
        final ViewHolder holder=new ViewHolder(view);
        holder.newsView.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View view) {
                int position=holder.getAdapterPosition();
                News news=mNewsList.get(position);
                Log.d("Title",news.getTitle());
                Intent intent=new Intent(context,DetailActivity.class);
                intent.putExtra("new",news);
                context.startActivity(intent);
            }
        });
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        News news=mNewsList.get(position);
        holder.newsImage.setImageResource(news.getImageId());
        holder.newsTitle.setText(news.getTitle());
        holder.newsResource.setText(news.getResource());
        holder.newsDate.setText(news.getDate());
    }


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

8 个解决方案

#1


启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

#2


startActivityForResult

#3


通过接口回调把需要做的操作传给Activity  然后Activity再通过startActivityForResult的带返回值的跳转  传给上一个界面

#4


引用 1 楼 qq_34364155 的回复:
启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

谢谢回答,成功解决数据传递的问题,之前想过用startActivityForResult但是在context后这个方法一直是红的,把context强制转换成Activity后成功。
但之前自己想的太天真,真的做下来才发现有点问题。
请问一下我能如何获得这是RecycleView中的哪个item,是需要在item的类中添加一个属性来判断是否已读吗?
最后需要根据此重设此item的textview的属性,还是在刷新adapter的时候adapter中判断这个属性更改么?
刚刚开始接触,问题有点多,不好意思,非常感谢 通过adapter打开的activity如何返回数据给上一个activity

#5


引用 1 楼 qq_34364155 的回复:
启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

#6


引用 5 楼 Leslie_May 的回复:
Quote: 引用 1 楼 qq_34364155 的回复:

启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

item加个唯一的ID属性,返回时把ID也返回,然后把这个ID对应的item设为已读,

#7


跳转使用activity.startActivityForResult();
重写Activity的onActivityResult(int requestCode, int resultCode, Intent data) 方法,然后通过data获取传递的数据

#8


引用 6 楼 qq_34364155 的回复:
Quote: 引用 5 楼 Leslie_May 的回复:

Quote: 引用 1 楼 qq_34364155 的回复:

启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

item加个唯一的ID属性,返回时把ID也返回,然后把这个ID对应的item设为已读,

谢谢。成功解决问题。非常感谢

#1


启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

#2


startActivityForResult

#3


通过接口回调把需要做的操作传给Activity  然后Activity再通过startActivityForResult的带返回值的跳转  传给上一个界面

#4


引用 1 楼 qq_34364155 的回复:
启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

谢谢回答,成功解决数据传递的问题,之前想过用startActivityForResult但是在context后这个方法一直是红的,把context强制转换成Activity后成功。
但之前自己想的太天真,真的做下来才发现有点问题。
请问一下我能如何获得这是RecycleView中的哪个item,是需要在item的类中添加一个属性来判断是否已读吗?
最后需要根据此重设此item的textview的属性,还是在刷新adapter的时候adapter中判断这个属性更改么?
刚刚开始接触,问题有点多,不好意思,非常感谢 通过adapter打开的activity如何返回数据给上一个activity

#5


引用 1 楼 qq_34364155 的回复:
启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

#6


引用 5 楼 Leslie_May 的回复:
Quote: 引用 1 楼 qq_34364155 的回复:

启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

item加个唯一的ID属性,返回时把ID也返回,然后把这个ID对应的item设为已读,

#7


跳转使用activity.startActivityForResult();
重写Activity的onActivityResult(int requestCode, int resultCode, Intent data) 方法,然后通过data获取传递的数据

#8


引用 6 楼 qq_34364155 的回复:
Quote: 引用 5 楼 Leslie_May 的回复:

Quote: 引用 1 楼 qq_34364155 的回复:

启动新activity用    startActivityForResult();
原activity 重写  onActivityResult(int requestCode, int resultCode, Intent data)  方法,在这里修改数据将这条数据设为已读,再刷新adapter

重新写了一下后,问题变成如何获得这到底是哪一个item,因为我是在item的类中增加了一个属性去判断是否已读,但是在adapter打开的activity中传递过去的是一个item,返回数据是返回了一个标志值。在上一个activity中接受时无法知道这究竟是哪个item啊,貌似是无法返回这个item啊,这就难倒了。。。
有没有什么更好的方法啊,谢谢 通过adapter打开的activity如何返回数据给上一个activity

item加个唯一的ID属性,返回时把ID也返回,然后把这个ID对应的item设为已读,

谢谢。成功解决问题。非常感谢