首页 > 解决方案 > pass values from RecyclerView to view it in activity

问题描述

I need to pass data from RecyclerView to GalleryActivity class to view image and 2 texts by clicking on RecyclerView. I followed this tutorial. It is warking good but I want to open image and text in another activity. Can someone help?

@Override
public boolean onInterceptTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {
        view = Recyclerview.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
        if(view != null && gestureDetector.onTouchEvent(motionEvent)) {
            //Getting RecyclerView Clicked Item value.
            RecyclerViewItemPosition = Recyclerview.getChildAdapterPosition(view);
            Intent intent=new Intent(MainActivity.this,GalleryActivity.class);
            Bundle bundle=new Bundle();
            bundle.putString("title",title);
            bundle.putString("url",url);
            intent.putExtras(bundle);
            startActivity(intent);
        }
        return false;
    }
    @Override
    public void onTouchEvent(RecyclerView Recyclerview, MotionEvent motionEvent) {
    }
    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    }
});

And the GalleryActivity class

public class GalleryActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        String title = getIntent().getStringExtra("title");
        setTitle(title);
        TextView desc = (TextView) findViewById(R.id.image_description);
        desc.setText(title);
    }
}

activity_gallery:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="100">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="70"
        android:id="@+id/image"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_description"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:text="Canada"
        android:textSize="20sp"
        android:textColor="#000"
        />

</LinearLayout>

标签: javaandroid

解决方案


你可以很容易地做到这一点,它可以通过多种方式实现。我为你张贴的一张。这是一个 Adapter 类的示例,您需要在其中传递Context以供进一步使用。

如果您Context的适配器中有可用的,您可以使用您的捆绑包开始一个活动。

view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(context, YourActivity.class);
                    String s = list.get(getAdapterPosition()); // here you will get current item
                    intent.putExtra("key", s);
                    context.startActivity(intent);
                }
            });

这是您需要集成为适配器的完整代码。

public class AdapterDemo extends RecyclerView.Adapter<AdapterDemo.MyViewHolder> {

    private ArrayList<String> list = new ArrayList<>();
    private Context context;

    class MyViewHolder extends RecyclerView.ViewHolder {

        MyViewHolder(View view) {
            super(view);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(context, YourActivity.class);
                    String s = list.get(getAdapterPosition()); // here you will get current item
                    intent.putExtra("key", s);
                    context.startActivity(intent);
                }
            });
        }
    }



    public AdapterDemo(Context context) {
        this.context = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_nothing_to_display, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String s = list.get(position);
        // TODO: 4/29/2018  your code here
    }

    @Override
    public int getItemCount() {
        if (list == null) list = new ArrayList<>();
        return list.size();
    }


    public void insertItemInList(String beanChat) {
        if (list == null) list = new ArrayList<>();
        list.add(beanChat);
        notifyItemInserted(list.size() - 1);
    }


    public void insertItemsInList(ArrayList<String> myList) {
        if (list == null) list = new ArrayList<>();
        for (String beanChat : myList) {
            insertItemInList(beanChat);
        }
    }

    public ArrayList<String> getList() {
        if (list == null) list = new ArrayList<>();
        return list;
    }

    public void clearList() {
        if (list == null) return;
        list.clear();
        notifyDataSetChanged();
    }
}

推荐阅读