2017-11-15 5 views
0

Ich mache eine Notiz App zu nehmen.
Es gibt eine Schaltfläche, um alle Elemente in RecyclerView zu löschen, und die Sichtbarkeit wird auf "Gone" gesetzt. Aber ich möchte, dass es nur sichtbar ist, wenn es Notizen in der App gibt.
Ich weiß nicht warum mit
if (notesList.size()> 0) { removeAllButton.setVisibility (View.VISIBLE);
funktioniert nicht! Wie kann ich das machen?

Bearbeiten: Hinzugefügt den Adapter-Code.

Hier ist meine Hauptklasse:Wie mache ich eine Schaltfläche sichtbar, wenn RecyclerView Elemente enthält?

public class MainActivity extends AppCompatActivity { 
private List<Notes> notesList = new ArrayList<>(); 
private static final int REQUEST_CODE = 1001; 
final NoteAdapter adapter = new NoteAdapter(this); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final RecyclerView recyclerView = findViewById(R.id.rv_recyclerView); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setAdapter(adapter); 
    Button addNoteButton = findViewById(R.id.button_main_addNote); 
    final Button removeAllButton = findViewById(R.id.button_main_deleteAll); 
    addNoteButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, NoteEdit.class); 
      startActivityForResult(intent, REQUEST_CODE); 
     } 
    }); 


    removeAllButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      adapter.removeAll(); 
      removeAllButton.setVisibility(View.GONE); 
     } 
    }); 
    if (adapter.getItemCount()>=1){ 
     removeAllButton.setVisibility(View.VISIBLE); 
    } 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_CODE && 
      resultCode == RESULT_OK && 
      data != null) { 
     String noteTitle = data.getStringExtra(NoteEdit.Result_Key_Title); 
     String noteDescription = data.getStringExtra(NoteEdit.Result_Key_Description); 
     Notes notes = new Notes(); 
     notes.setNoteTitle(noteTitle); 
     notes.setNoteDescription(noteDescription); 
     adapter.addNote(notes); 
     adapter.getItemCount(); 
    } 
}} 


Adapter Klasse:

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.SimpleItemViewHolder> { 

private Context context; 
private List<Notes> notes = new ArrayList<>(); 

public NoteAdapter(Context context) { 

    this.context = context; 
} 

@Override 
public SimpleItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater layoutInflater = LayoutInflater.from(context); 
    View view = layoutInflater.inflate(R.layout.item_sample, parent, false); 
    return new SimpleItemViewHolder(view); 
} 

@Override 
public void onBindViewHolder(SimpleItemViewHolder holder, int position) { 
    holder.bindNote(notes.get(position)); 

} 

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

public void addNote(Notes note) { 
    notes.add(note); 
    notifyItemInserted(notes.size() - 1); 
} 

public void removeAll() { 
    notes.clear(); 
    notifyDataSetChanged(); 
} 

private TextView titleTextView; 
private TextView descriptionTextView; 

public class SimpleItemViewHolder extends RecyclerView.ViewHolder { 

    public SimpleItemViewHolder(View itemView) { 
     super(itemView); 
     titleTextView = itemView.findViewById(R.id.tv_itemSample_title); 
     descriptionTextView = itemView.findViewById(R.id.tv_itemSample_description); 
    } 


    public void bindNote(Notes note) { 
     titleTextView.setText(note.getNoteTitle()); 
     descriptionTextView.setText(note.getNoteDescription()); 
    } 

}} 

Antwort

0

nach Ihren Code Sie sollten mit versuchen getItemCount()

die Gesamtzahl der Elemente Kosten in dem Datensatz, der von dem Adapter gehalten wird.

if(adapter.getItemCount() != 0) 
    { 
    // VISIBLE 
    } 
+0

habe ich die gleiche Sache vor hier zu fragen, aber überraschend ist es nicht funktioniert und die Taste egal gegangenes bleibt, wenn es Elemente in der sind App oder nicht! Ich werde die Adaptercodes zur Frage hinzufügen. schau mal, ob da etwas nicht stimmt – Hamed

+0

@Hamed nope, wo du Werte zu 'notesList' hinzufügst. Du hast 'adapter.addNote (Noten);' –

+0

@Hamed 'wenn { // VISIBLE }' –

0

Ich sehe, dass in onActivityResult Sie tatsächlich die Hinweise zum RecyclerView hinzufügen, indem Sie Ihren Adapter verwenden. Nach dem Hinzufügen der Notiz zum Adapter rufen Sie wahrscheinlich notifydataset vom Adapter geändert. Nach dem Hinzufügen der Notiz in der Aktivität Aufruf getItemCount() auf dem Adapter und nur wenn es gleich eins machen Sie die Schaltfläche sichtbar. Klicken Sie im Clicklistener auf "Alle entfernen", um die Schaltfläche auszublenden.

Auch notifyitemInserted nach addnote zu notifydatasetchanged

Gili ändern

package com.example.gilad.myapplication; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.Button; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
    private List<Notes> notesList = new ArrayList<>(); 
    private static final int REQUEST_CODE = 1001; 
    final NoteAdapter adapter = new NoteAdapter(this); 
    private View mRemoveAllButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final RecyclerView recyclerView = findViewById(R.id.rv_recyclerView); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setAdapter(adapter); 
     Button addNoteButton = findViewById(R.id.button_main_addNote); 
     mRemoveAllButton = findViewById(R.id.button_main_deleteAll); 
     addNoteButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, NoteEdit.class); 
       startActivityForResult(intent, REQUEST_CODE); 
      } 
     }); 


     mRemoveAllButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       adapter.removeAll(); 
       mRemoveAllButton.setVisibility(View.GONE); 
      } 
     }); 

    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CODE && 
       resultCode == RESULT_OK && 
       data != null) { 
      String noteTitle = data.getStringExtra(NoteEdit.Result_Key_Title); 
      String noteDescription = data.getStringExtra(NoteEdit.Result_Key_Description); 
      Notes notes = new Notes(); 
      notes.setNoteTitle(noteTitle); 
      notes.setNoteDescription(noteDescription); 
      adapter.addNote(notes); 
      final int adapterCount = adapter.getItemCount(); 
      if (adapterCount == 1){ 
       mRemoveAllButton.setVisibility(View.VISIBLE); 
      } 
     } 
    }} 
+0

Ich tat wie du gesagt hast. aber hat nicht funktioniert:/ Nur die Schaltfläche wird nach dem Klicken – Hamed

+0

aktualisiert Die Frage mit neuen Codes der Hauptklasse – Hamed

+0

aktualisiert Ich habe den Code hinzufügen. hoffe es wird dir helfen. Bitte beachten Sie, dass ich die Schaltfläche zum Entfernen alle zu einem Mitglied geändert habe. –

Verwandte Themen