2017-10-16 18 views
0

私はそのアプリでショッピングアプリを開発しています。私は売り手によってアップロードされた商品をリストする必要があります。リストビューにこれらの項目を限られた情報で表示する必要があります。recyclerviewのonclickイベント

一度購入した商品をクリックすると別のページにナビゲートする必要があり、その製品の詳細を表示する必要があります。

android studio.ifでrecyclerviewを使用してリストを生成しました。そのリストビュー内の1つのデータセットをクリックすると、別のページに移動しなければならず、ユーザーによって強要されたデータセットに関する詳細情報を表示する必要があります。

私は次のコードセグメントを試しましたが、うまく動作しません。

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 – Anonymous

+0

[RecyclerView onClick](https://stackoverflow.com/questions/24471109/recyclerview-onclick)の可能な複製 –

答えて

0

あなたのrecyclerviewの各項目のクリックイベントに耳を傾け、そのAdViewHolderクラスでView.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 
      } 
     }); 
    }