[JAVA] Ändern Sie die Verarbeitung, wenn Sie für jede Liste auf die Schaltfläche in RecyclerView klicken

Einführung

Sie verwenden RecyclerView, um eine Listenanzeige in der Android-Anwendungsentwicklung zu erstellen, oder? Wenn Sie eine Schaltfläche in RecyclerView einrichten und von einer Liste zu einem anderen Bildschirm wechseln, möchten Sie möglicherweise wissen, ** wie viele Schaltflächen in der Liste gedrückt wurden **. In RecyclerView.Adapter kann "welche Zifferntaste gedrückt wurde" ziemlich schnell abgerufen werden, aber ich war ein wenig süchtig danach, es in MainActivity zu verwenden. Machen Sie sich also eine Notiz.

Informationen zu RecyclerView

Eine Übersicht finden Sie in diesem Artikel, da er leicht zu verstehen war. Grundlagen von RecyclerView

Was du machen willst

Das Bild der Verarbeitung, wenn die Taste zum Zeitpunkt des Bildschirmübergangs gedrückt wird, ist wie folgt. Ich möchte Ihnen sagen, welche Liste von Schaltflächen für den Übergangszielbildschirm gedrückt wurde.

RecyclerView.Adapter erbt übrigens nicht die Activty-Klasse, sodass ein Bildschirmübergang nicht möglich ist. Daher ist es erforderlich, die Nummer der auf MainActivity gedrückten Liste zu kennen und den Bildschirm zu ändern.

MainActivity


@Override                                                                             
public void onClick(View view) {                                                      
    int line = getLine(); //Ich möchte die Anzahl der Zeilen in der Liste erhalten, die ich irgendwie gedrückt habe
    Intent hoge = new Intent(MainActivity.this, HogeActivity.class);
    hoge.putExtra("line", line);                   
    startActivity(hoge);                                                              
}    

Als allererstes

Ich möchte MainActivity verarbeiten, wenn ich die in RecyclerView enthaltene Schaltfläche drücke. Registrieren Sie OnClickListener of MainActivity im Listener von RecyclerView.Adapter. Jetzt können Sie den Listener so einstellen, dass OnClick () auf MainActivty aufgerufen wird, wenn Sie eine Schaltfläche in der Liste drücken.

RecyclerAdapter.java


public void setOnItemClickListener(View.OnClickListener listener){
        m_listener = listener;
}

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element
    final int pos = position;
    //Wenn die Schaltfläche in der Liste gedrückt wird, wird der oben registrierte Klick-Listener aufgerufen.
    holder.m_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            m_listener.onClick(view);
        }
    });
}

MainActivity.java


RecyclerView.Adapter rAdapter = new RecycleAdapter(data);
rAdapter.setOnItemClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int line = getLine(); //Ich möchte die Anzahl der Zeilen in der Liste erhalten, die ich irgendwie gedrückt habe
        Intent hoge = new Intent(MainActivity.this, HogeActivity.class);
        hoge.putExtra("line", line);                   
        startActivity(hoge);  
    }
});    

Hauptthema

Im aktuellen Status wird der gleiche Vorgang ausgeführt, unabhängig davon, welche Liste von Tasten Sie drücken.

RecyclerView.Adapter verfügt über eine Methode namens "onBindViewHolder". Dies ist die Methode, die jedes Mal aufgerufen wird, wenn ein Listenelement erstellt wird. Und das Argument "Position" repräsentiert die genaue Nummer der erstellten Liste.

** Implementieren Sie, um den Wert dieser Position in der Mitgliedsvariablen von RecyclerView im Klick-Listener der Schaltfläche in der Liste zu registrieren. ** ** ** ** Auf diese Weise wird beim Drücken der Schaltfläche der Wert der Anzahl der Zeilen in der Mitgliedsvariablen (m_line) von RecycleViewAdapter registriert. ** ** **

Erstellen Sie dann eine Methode, die von außen auf diese m_line verweisen kann, und implementieren Sie sie so, dass sie in OnClick () von MainActivity aufgerufen wird. Danach ist es in Ordnung, wenn Sie den Wert mit dem Übergangsziel "HogeActivity" erhalten und die Verarbeitung entsprechend ändern.

RecyclerAdapter.java


public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element
    final int pos = position;
    holder.m_btn.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) {
            m_line = pos; //Registrieren Sie die Anzahl der Zeilen
            m_listener.onClick(view); //Rufen Sie Main OnClick sofort nach der Registrierung an
        }
    });
}

public int getLine(){
    return m_line; //Holen Sie sich die Anzahl der Zeilen
}

MainActivity.java


final RecyclerView.Adapter rAdapter = new RecycleAdapter(list);
recyclerView.setAdapter(rAdapter);
((RecycleAdapter) rAdapter).setOnItemClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int line = ((RecycleAdapter) rAdapter).getLine(); //Hier m_Holen Sie sich den Wert der Linie
        Intent edit = new Intent(MainActivity.this, HogeActivity.class);
        edit.putExtra("line", line);
        startActivity(edit);
    }
});

Schließlich

Es ist eine Art Umweg-Implementierung, Ich konnte nur diesen Weg finden, um der Hauptaktivität die Anzahl der Zeilen mitzuteilen, die ich gedrückt habe, und so kam ich zu dieser Implementierung. Wenn es so etwas wie "Nein, wenn du Hogehoge machst, ohne das zu tun, bekommst du einen Schuss ..." gibt es mir bitte.

Ganz am Ende

Da ich den Code aus der von mir erstellten App extrahiert und ein wenig geändert habe, stimmen die Variablennamen im Text und im Quellcode möglicherweise nicht überein. Bitte konvertieren Sie es im Gehirn.

Recommended Posts

Ändern Sie die Verarbeitung, wenn Sie für jede Liste auf die Schaltfläche in RecyclerView klicken
So ändern Sie den Prozess in Abhängigkeit von der Liste, die gedrückt wird, wenn mehrere ListViews vorhanden sind
[Android] Steuern Sie das Ereignis einfach, wenn Sie in Fragment auf die Schaltfläche Zurück klicken
Ändern oder Ausblenden der Schaltfläche und des EditText auf dem Bildschirm für jede Seite
So führen Sie einen bestimmten Vorgang aus, wenn die Zurück-Taste im Android-Fragment gedrückt wird
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
Ändern Sie den Einstellungswert für jede Umgebung mit Digdag (RubyOnRails).
Verhalten, wenn jedes im umgekehrten Bereich ausgeführt wird
[Android] Ändern Sie den App-Namen und das App-Symbol für jeden Geschmack
Wofür ist der Konstruktor?
Maßnahmen gegen das Vergessen, die Schriftart anzugeben, wenn titleTextAttributes angegeben wird
Wenn die Verarbeitung nach der bedingten Verzweigung redundant ist-12 [C # Refactoring Sample]
[Schienen] So ändern Sie den Seitentitel des Browsers für jede Seite
Ändern Sie das Gespräch je nachdem, welcher Tag heute ist