1

Sortieren von neuen auf Android so nackten mit mir, wenn dies eine einfache Frage ist.Android RecyclerView onClick in verschiedenen Aktivitäten

Alles funktioniert gut und mein onClick in meinem RecyclerView funktioniert, um die Positionen meiner Artikel zu bekommen, aber mein Entwurf verlangt, dass ich auf ein Element des RecyclerView klicken und eine neue Aktivität eröffnen kann (als Popover oder Pop-up). Ich kann das erreichen, aber meine Probleme kommen mit den Informationen, die ich auf dem Popover anzeigen muss. Die Informationen stammen wie dies in der Aktivität (innerhalb eines Firebase Anruf Wert)

attributeList.removeAll(attributeList); 
for (DataSnapshot child : dataSnapshot.child("Attribute").getChildren()){ 
    Attribute attribute = child.getValue(Attribute.class); 
      attribute_list newAttributeList = new attribute_list(attribute.Name + ": " + attribute.Value); 
      attributeList.add(newAttributeList); 
} 
attributeAdapter = new attribute_list_adapter(attributeList, getContext()); 
recyclerAttribute.setAdapter(attributeAdapter); 

Dies funktioniert perfekt für die Anzeige von Informationen, aber es gibt mehr als nur ein „Wert“ und „name“ mit dem Klick zugeordnet.

Grundsätzlich, wenn ich ein Element auswähle, muss ich die Position des Elements angeklickt (die ich habe) und vergleichen Sie es mit der Position in attributeList, so dass ich einen Firebase-Aufruf aufrufen kann (oder die Daten irgendwie weitergeben) popover Werte aus dem "Attribut" Klasse angezeigt werden (wie zB Name, Wert, Beschreibung und eine andere Liste (recyclerView)

Mein recyclerView.

public class attribute_list_adapter extends RecyclerView.Adapter<attribute_list_adapter.ViewHolder> { 

    private List<attribute_list> listItems; 
    private Context context; 

    public attribute_list_adapter(List<attribute_list> listItems, Context context) { 
     this.listItems = listItems; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.attribute_list, parent, false); 
     return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     attribute_list listItem = listItems.get(position); 

     holder.txtTitle.setText(listItem.getTxtTitle()); 
    } 

    @Override 
    public int getItemCount() { 
     return listItems.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     public TextView txtTitle; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this); 
      txtTitle = (TextView) itemView.findViewById(R.id.txtTitle); 
     } 

     @Override 
     public void onClick(View v) { 

     } 
    } 
} 

Antwort

1

Dies ist Beispiel:

public class attribute_list_adapter extends RecyclerView.Adapter<attribute_list_adapter.ViewHolder> { 

private List<attribute_list> listItems; 
private Context context; 

public attribute_list_adapter(List<attribute_list> listItems, Context context) { 
    this.listItems = listItems; 
    this.context = context; 
} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.attribute_list, parent, false); 
    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.itemView.setOnClickListener(new View.onClickListener() { 
    @Override 
    public void onClick(View v) { 
    onItemClickListener.onItemClick(position); 
    } 
}); 

} 


@Override 
public int getItemCount() { 
    return listItems.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    TextView txtberita; 
    ImageView imgberita; 
    TextView txtnama; 
    public ViewHolder(View itemView) { 
     super(itemView); 
     txtnama = (TextView) itemView.findViewById(R.id.txtnama); 
     txtberita = (TextView) itemView.findViewById(R.id.txtberita); 
     imgberita = (ImageView) itemView.findViewById(R.id.imgberita); 
    } 
} 

    public void setOnItemClickListener(OnItemClickListener onItemClickListener){ 
    this.onItemClickListener = onItemClickListener; 
} 

OnItemClickListener onItemClickListener; 

    public interface OnItemClickListener{ 
    void onItemClick(int position); 
} 
} 

Ihre Aktivität. in OnCreate()

public class TestActivity extends AppCompatActivity implements attribute_list_adapter.OnItemClickListener { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    attribute_list_adapter adapter = new attribute_list_adapter(listItems, this); 
    adapter.setOnItemClickListener(this); 
} 

    @Override 
public void onItemClick(int position) { 
    // code here 
} 
} 
+0

Sie müssen den Wert unter *** void onItemClick (int position) ändern; *** –

+0

Sieht vielversprechend aus. your_adapter.setOnItemClickListener (this); Verhält sich nicht richtig. Wenn Sie "your_adapt" angeben, sagen Sie meine RecyclerView.Adapter-Variable? Keine meiner Variablen hat diese Methode zu setzen, die (wie ich glaube) daraus resultiert, dass die Position null ist. Hast du einen Moment zu klären? – Torewin

+0

Ich aktualisiere meine Antwort? –

0

eine Schnittstelle so etwas wie

erstellen
public interface OnSingleItemClickListener{ 

void onSingleItemClick(int position); 
} 

implementieren es dann auf Ihre ViewHolder wie diese

public class ViewHolder extends RecyclerView.ViewHolder implements OnSingleItemClickListener { 

    public ViewHolder(View itemView) { 
     super(itemView); 
    } 

@Override 
void onSingleItemClick(int position){ 
if(listItems.get(position) == listItems.get(getAdapterPosition)){ 
// TODO do something here 
    } 

} 

jetzt auf Ihrem OnBindViewHolder in Ihrem Adapter Sie dies tun müssen.

Verwandte Themen