recyclecview的onclick事件

时间:2017-10-16 17:55:42

标签: java android android-recyclerview

我正在该应用程序中开发购物应用程序我需要列出卖家上传的产品,我需要在列表视图中显示这些项目,信息有限。

一旦买家点击了需要导航到另一个页面的特定项目,它需要显示有关该产品的更多详细信息。

我已经在android studio中使用recyclelerview生成了一个列表。如果我点击该列表视图中的一个数据集,它必须导航到另一个页面,并且必须显示有关用户所访问的数据集的更多信息。

我已尝试过以下代码段,但它无法正常工作。

public class getItem extends AppCompatActivity {

    private RecyclerView mAd_list;
    private DatabaseReference mDatabase;

    Button buy;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_items);

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Items");

        mAd_list = (RecyclerView) findViewById(R.id.ad_list);
        mAd_list.setHasFixedSize(true);
        mAd_list.setLayoutManager(new LinearLayoutManager(this) {
        });

        mAd_list.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intentRegistration=new Intent(getApplicationContext(),DisplayListDetailActivity.class);
                startActivity(intentRegistration);
            }

        });


    }

    @Override
    protected void onStart() {
        super.onStart();

        FirebaseRecyclerAdapter<Item, AdViewHolder>firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Item, AdViewHolder>(

                Item.class,
                R.layout.view_item,
                AdViewHolder.class,
                mDatabase

        ) {

            @Override
            protected void populateViewHolder(AdViewHolder viewHolder, Item model, int position) {

                viewHolder.setTitle(model.getName());
                viewHolder.setDesc(model.getPrice().toString());
                viewHolder.setImage(getApplicationContext(), model.getImage());

            }
        };
        mAd_list.setAdapter(firebaseRecyclerAdapter);
    }
}

class AdViewHolder extends RecyclerView.ViewHolder{

    View mView;

    public AdViewHolder(View itemView) {
        super(itemView);

        mView = itemView;
    }

    public void setTitle(String title) {

        TextView post_title = (TextView) mView.findViewById(R.id.post_title);
        post_title.setText(title);
    }

    public void setDesc(String desc){
        TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
        post_desc.setText(desc);
    }

    public void setImage (Context ctx, String image){
        ImageView post_image = (ImageView) mView.findViewById(R.id.post);
        Picasso.with(ctx).load(image).into(post_image);

    }

}

接口

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp">



    <TextView
        android:layout_width="match_parent"
        android:layout_height="324dp"
        android:id="@+id/post_desc"
        android:text="The Ad Description Goes Here"
        android:paddingTop="260dp"
        android:textSize="16dp"
        android:paddingBottom="15dp"
        android:paddingLeft="10dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:id="@+id/post"
        android:scaleType="centerCrop"
        android:adjustViewBounds="true" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/post_title"
        android:text="Ad Title Goes Here"
        android:paddingTop="220dp"
        android:textSize="16dp"
        android:paddingLeft="10dp"
        android:textStyle="bold" />



</android.support.v7.widget.CardView>

2 个答案:

答案 0 :(得分:0)

您应该在recyclelerview的每个项目上收听click事件,因此请尝试在View.OnClickListener类中实现AdViewHolder接口(并请根据约定定义您的类名)。

答案 1 :(得分:0)

您正在整个Recycler中设置OnClickListener。

您必须在每个项目中创建onclicListener,而不是这样做。您可以在viewHolder中执行此操作。

public AdViewHolder(View itemView) {
        super(itemView);

        mView = itemView;
        mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Do Something here for every Item
            }
        });
    }