0

私はRecycleViewをXMLを使用せずにプログラム的に設計しているので、Javaファイルをコピーするだけで、このコードをすべてのプロジェクトで再利用できます。Android RecycleViewプログラムでSearchViewを追加する

RecycleViewにSearchViewを追加し、サードパーティAPIを使用せずにすべての検索クエリフィルタをプログラムで設定する必要があります。

解決策を教えてください。

SearchView searchVyuVar = new SearchView(this); 
searchVyuVar.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
{ 
    @Override 
    public boolean onQueryTextSubmit(String query) 
    { 
     recylcleLysLysMgrVar.filter(query); 
     return true; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     recylcleLysLysMgrVar.filter(newText); 
     return true; 
    } 
}); 

RecyclerView recylcleLysLyoVav = new RecyclerView(this); 
recylcleLysLyoVav.addView(searchVyuVar); 

recylcleLysLyoVav.setAdapter(recylcleLysLysMgrVar); 
recylcleLysLyoVav.setLayoutManager(new LinearLayoutManager(this)); 

答えて

0

苦労の1日後、私はプログラムで設計されたこの検索バーを手に入れました。 http://abhiandroid.com/ui/searchview
リンク以下

の助けを借りて
は、これは私が私のように苦労しない希望する者すべてを支援することです。

LinearLayout NamSupRloVav; 
SearchView NamSrhVyuVav; 
RecyclerView NamLysLyoVav; 
NamLysAdrCls NamLysAdrVar; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    NamSupRloVav = new LinearLayout(this); 
    NamSupRloVav.setOrientation(LinearLayout.VERTICAL); 

    NamSrhVyuVav = new SearchView(this); 
    NamSrhVyuVav.setQueryHint("Search . . ."); 
    NamSrhVyuVav.setIconified(false); 
    NamSrhVyuVav.onActionViewExpanded(); 
    NamSrhVyuVav.setPadding(20,10,20,10); 
    NamSupRloVav.addView(NamSrhVyuVav); 

    NamLysLyoVav = new RecyclerView(this); 
    NamLysLyoVav.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); 
    NamLysLyoVav.setVerticalScrollBarEnabled(true); 

    NamLysAdrVar = new NamLysAdrCls(GetAllNamAryLysFnc()); 
    NamLysLyoVav.setAdapter(NamLysAdrVar); 
    NamLysLyoVav.setLayoutManager(new LinearLayoutManager(this)); 

    NamSrhVyuVav.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
    { 
     @Override 
     public boolean onQueryTextChange(String SrhSrgPsgVal) 
     { 
      NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String SrhSrgPsgVal) 
     { 
      NamLysAdrVar.SrhFltFnc(SrhSrgPsgVal); 
      return true; 
     } 
    }); 

    NamSupRloVav.addView(NamLysLyoVav); 
    setContentView(NamSupRloVav); 
} 

public class NamLysAdrCls extends RecyclerView.Adapter<VyuHlrCls> 
{ 
    ArrayList<NamCls> FchNamAryLysVar = new ArrayList<NamCls>(); 
    ArrayList<NamCls> SrhNamAryLysVar = new ArrayList<NamCls>(); 

    public NamLysAdrCls(ArrayList<NamCls> NamLysPsgVar) 
    { 
     FchNamAryLysVar.addAll(NamLysPsgVar); 
     SrhNamAryLysVar.addAll(NamLysPsgVar); 
    } 

    @Override 
    public VyuHlrCls onCreateViewHolder(ViewGroup HubVyuGrp, int viewType) 
    { 
// |=> CodTdo Design Itm Idx Lyo 
     VyuHlrCls VyuHlrVar = new VyuHlrCls(NamLysItmLloVav); 
     return VyuHlrVar; 
    } 

    @Override 
    public void onBindViewHolder(VyuHlrCls VyuHlrPsgVar, int ItmIdxPsgVar) 
    { 

    } 

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

    public void DelItmFnc(int ItmPosPsgVar) 
    { 
     SrhNamAryLysVar.remove(ItmPosPsgVar); 
     notifyItemRemoved(ItmPosPsgVar); 
    } 

    public void SrhFltFnc(String SrhSrgPsgVal) 
    { 
     SrhSrgPsgVal = SrhSrgPsgVal.toLowerCase(); 
     SrhNamAryLysVar.clear(); 
     if (SrhSrgPsgVal.length() == 0) SrhNamAryLysVar.addAll(FchNamAryLysVar); 
     else 
     { 
      for (NamCls NamIdxVar : FchNamAryLysVar) 
      { 
       if(NamIdxVar.toLowerCase().contains(SrhSrgPsgVal)) 
       { 
        SrhNamAryLysVar.add(NamIdxVar); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 
+0

親切に使用する関数と変数の名前を付けるdiff形式を無視します。 –

関連する問題