2017-09-21 3 views
0

Ich habe eine horizontale recycleview innerhalb vertikale recycleview.Griff klicken Sie auf Artikel in Recyceln

und ich füge Liste hinzu cardview innerhalb horizontale recycleview.

Wie erhalten Sie die Artikelinformationen, wenn Sie auf den Artikel der Hauptaktivität klicken?

Danke

public class MainActivity extends AppCompatActivity { 
     private RecyclerView recyclerView; 
     private AlbumsVerticalAdapter adapter; 
     private List<Album> albumList; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      initCollapsingToolbar(); 
      recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
      albumList = new ArrayList<>(); 
      adapter = new AlbumsVerticalAdapter(this, albumList); 
      recyclerView.setHasFixedSize(true); 
      recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 
      recyclerView.setAdapter(adapter); 
     } 

     private void initCollapsingToolbar() {} 

     private void prepareAlbums() {} 
    } 


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

    private Context mContext; 
    private List<Album> albumList; 

    //............. 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 
     Album album = albumList.get(position); 
     holder.title.setText(album.getName()); 
     AlbumsHorizontalAdapter itemListDataAdapter = new AlbumsHorizontalAdapter(mContext, albumList); 
     holder.recycler_view_list.setHasFixedSize(true); 
     holder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); 
     holder.recycler_view_list.setAdapter(itemListDataAdapter); 
    } 

    @Override 
    public int getItemCount() { 
     return albumList.size(); 
    } 
} 
+0

Erstellen Callbacks() und Schnittstellen für diese – Ankita

+0

https://svn.code.sf.net/p/allowroidexample/svn/CardView dies mein Beispielcode. Sie können es überprüfen –

Antwort

3

Sie besser OnClickListener auf Ihrer ViewHolder Klasse zu implementieren und den Zuhörer in Ihren gewünschten Ansichten hinzuzufügen.

0

Zunächst erstellen Sie eine Schnittstelle wie:

public interface OnItemClickListener{ 
    void onItemClick(View view, int position) 
} 

auf global deklarieren:

private OnItemClickListener mOnItemClickListener; 

Als nächstes müssen Sie eine contructor wie:

public MyAdapter(Context context, List data, OnItemClickListener mOnItemClickListener){ 
//... 
this.mOnItemClickListener= mOnItemClickListener; 

}

Und in onBindViewHo lder

@Override 
public void onBindViewHolder(final FolderViewHolder holder, final int position) { 
    //.... 
    holder.image.setOnClickListener(new View.OnItemClickListener){ 
     @Override 
     public void onClick(View v) { 
      mOnItemClickListener.onItemClick(v,position);  
     } 
    }); 

}

Schließlich können Sie den Rückruf in der Klasse Verwendung Adapter implementieren wie:

public class A extends AppCombatActivity implements MyAdapter.OnItemClickListener{ 
//exist code 
    @Override 
    onItemClick(View view, int position){ 
    // Do something with view + position 
    } 

} 
+0

Hallo, vielen Dank für Ihre Unterstützung. Aber ich möchte die Position von cardview in horizontale Recycleview –

0
/Just try to implement the below code Snippet/ 

First make an Interface Class "RecyclerView_ItemClickListener" 

public interface RecyclerView_ItemClickListener 
{ 
    void onClick(View view, int position); 

    void onItemClick(View view, int position); 
} 

Then use this class in your Activity/Fragment and inside Adapter. 

How to Implement in Adapter class: 

private RecyclerView_ItemClickListener clickListener; 

public void setClickListener(RecyclerView_ItemClickListener itemClickListener) 
{ 
    this.clickListener = itemClickListener; 
} 

public void SetOnItemClickListener(final RecyclerView_ItemClickListener mItemClickListener) 
{ 
    this.clickListener = mItemClickListener; 
} 

Implement implements View.OnClickListener inside MyViewHolder Method 
of Adapter 

Example like this: class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 

itemView.setOnClickListener(this); 


Then put the below code 

@Override 
    public void onClick(View view) 
    { 
     if (clickListener != null) 
     { 
      clickListener.onClick(view, getAdapterPosition()); 

      clickListener.onItemClick(view,getAdapterPosition()); 
     } 
    } 

After that implements RecyclerView_ItemClickListener inside your 
Activity/Fragment 

in OnCreate: 

your_Adapter.setClickListener(this); 

your_Adapter.SetOnItemClickListener(this); 

@Override 
public void onClick(View view, int position) 
{} 

@Override 
public void onItemClick(View view, int position) 
{ 

} 
+0

Hallo, danke für Ihre Unterstützung. Aber ich möchte die Position von cardview in horizontalem recycleview bekommen –

0

eine inteface erstellen

public interface OnItemClickListener{ 
    void onItemClick(View view, int position) 
} 

eine parametrisierte Konstruktor hinzufügen in Ihr Adapter AlbumsVerticalAdapter

private OnItemClickListener mOnviewItemClickListener; 
public AlbumsVerticalAdapter(Context context, List data, OnItemClickListener mOItemClickListener){ 
//... 
this.mOnItemClickListener= mOnItemClickListener; 

nun innerhalb Adapterklasse diese Zeile in Ihrer in OnBinderViewHolder Methode hinzufügen

@Override 
public void onBindViewHolder(final FolderViewHolder holder, final int position) { 
    //.... 
    mholder.mimageview.setOnClickListener(new View.OnItemClickListener){ 
     @Override 
     public void onClick(View v) { 
      mOnItemClickListener.onItemClick(v,position);  
     } 
    }); 
} 

Implementieren Sie diese Schnittstelle in Ihrer Aktivität und verwenden onClick des Elements

public class MainActivity extends AppCombatActivity implements AlbumsVerticalAdapter.OnItemClickListener{ 
     @Override 
     onItemClick(View view, int position){ 
     // write your code 
     } 

    } 
+0

Hallo, vielen Dank für Ihre Unterstützung. Aber ich möchte die Position von cardview in horizontaler Recycleview –

1

Mit Blick auf Ihr Code der VerticalRecyclerViewAdapter hat eine List<Albums> und jedes Album in dieser Liste wird eine Horizonta benötigen lRecyclerViewAdapter zum Halten eines anderen List<Albums>.

In Ihrem VerticalRecylerViewAdapter erstellen Sie VerticalClickListener, die von Ihrer Aktivität implementiert werden. Innerhalb von HorizontalRecyclerViewAdapter erstellen Sie HorizontalClickListener, die von Ihrem VerticalRecyclerViewAdapter für jedes Album implementiert werden. Wenn Sie den HorizontalRecyclerViewAdapter für jedes Album erstellen, geben Sie auch die vertikale Position ein.Wenn dann eine Kartenansicht angeklickt wird, kann die HorizontalClickListener die vertikale Position des Adapters und auch die horizontale Position der Kartenansicht zurückgeben. Der VerticalRecyclerViewAdapter gibt die vertikale und horizontale Position für Ihre Aktivität zurück.

+0

OMG bekommen, vielen Dank. –

Verwandte Themen