2017-10-16 100 views
0

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

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

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

我已经尝试了下面的代码段,但它不会工作。

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> 
+0

您已经在列表容器上设置了单击侦听器。有很多关于你的案例的问题/教程。听取点击应该设置在项目不是整个列表,但它很难通过电话粘贴一些来源,对不起... –

+1

你可以找到解决方案[这里](https://stackoverflow.com/questions/28767413/how-to -open-a-different-activity-on-recyclerview-item-onclick) – Anonymous

+0

[RecyclerView onClick]的可能重复(https://stackoverflow.com/questions/24471109/recyclerview-onclick) –

回答

0

你应该听你的recyclerview的每个项目的点击事件,所以要尽量实现AdViewHolderView.OnClickListener接口(和请,根据惯例定义你的类名)。

+0

你能给我们一些你的答案的例子吗? –

+0

因为信息来自数据库,我不能使用正常列表。 –

+0

这里是一个链接到github https://github.com/markon/big-nerd-ranch-android-programming-2nd/tree /master/CriminalIntent-16.2/app/src/main/java/com/example/marco/criminalintent可能会帮助你 – jibrahim

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 
      } 
     }); 
    }