两次按下后显示按下按钮的结果

两次按下后显示按下按钮的结果

问题描述:

我有一个在firebase中搜索的活动,它包含edittext用于在按下按钮时输入文本和按钮结果应该出现在recyclerview中,但是当我按下按钮时第一次没有出现,除非我按下按钮,第二次 findDataActivity两次按下后显示按下按钮的结果

public class FindDataActivity extends AppCompatActivity { 
DatabaseReference db; 
FirebaseHelper helper; 
MyAdapter adapter; 
RecyclerView rv; 
EditText findETxt; 
Button findBtn; 
ArrayList<Paints> p; 
String s; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_find_data); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    ActionBar actionBar = getSupportActionBar(); 
    if(actionBar != null) 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    //SETUP RECYCLER 
    rv = (RecyclerView) findViewById(R.id.rvsearch); 
    rv.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 

    //INITIALIZE FIREBASE DB 
    db = FirebaseDatabase.getInstance().getReference("Database"); 

    adapter = new MyAdapter(FindDataActivity.this, p); 
    rv.setAdapter(adapter); 
    findBtn = (Button) findViewById(R.id.find_btn); 
    helper = new FirebaseHelper(db); 
} 

public void search(View view) { 

    db.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      findETxt = (EditText) findViewById(R.id.findETxt); 
      s = findETxt.getText().toString(); 
      p=helper.retrieveSearch(s); 
      adapter = new MyAdapter(FindDataActivity.this, p); 
      rv.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 




@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id=item.getItemId(); 
    if(id == android.R.id.home){ 
     onBackPressed(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

火力

public class FirebaseHelper { 
DatabaseReference db; 
Boolean saved=null; 
Boolean saved1=null; 

ArrayList<Paints> paints=new ArrayList<>(); 
ArrayList<String> keys=new ArrayList<>(); 

public FirebaseHelper(DatabaseReference db) { 
    this.db = db; 
} 
//READ THEN RETURN ARRAYLIST FOR SEARCH ITEMS IN CASE OF SEARCHING ABOUT ITEM 
public ArrayList<Paints> retrieveSearch(final String item) { 
    db.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      fetchDataSearch(dataSnapshot,item); 
     } 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      fetchDataSearch(dataSnapshot,item); 
     } 
     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 
     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
    return paints; 
} 

//IMPLEMENT FETCH DATA AND FILL ARRAYLIST FOR SEARCH 
private void fetchDataSearch(DataSnapshot dataSnapshot,String item) 
{ 
    paints.clear(); 

    //sorting and searching 
    final DatabaseReference myRef = db.child("items"); 
    Query query = myRef.orderByChild("type").startAt(item) 
      .endAt(item + "\uf8ff"); 

    query.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 
       Paints paint=messageSnapshot.getValue(Paints.class); 

       paints.add(paint); 
       //Toast.makeText(FindDataActivity.this, "found " + type + " unit: " + unit + " price " + price, Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

感谢的代码的代码提前

+0

是否总是两台印刷机后?或者在三次或更多次快速按压后发生? –

+0

它总是在两次按下之后 –

+0

但是,您的'findBtn'按钮在哪里?clickListener –

在你MyAdapter类,你必须创建这样的方法:

public void updateAdapter(ArrayList<Paints> paint){ 
    this.paint= paint; 
    notifyDataSetChanged(); 
} 

在你search method更换adapter.notifyDataSetChanged();adapter.updateAdapter(p);