2017-10-16 71 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 
      } 
     }); 
    }