2017-08-29 11 views
0

私のアプリでフラグメントを使用しています。すべてのフラグメントにはリストビューがあります。リストビューは、単一のイメージビューを含むカスタムリストビューです。ListViewを含むフラグメント内のSearchView?

<ImageView 
    android:id="@+id/imageView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    app:srcCompat="@android:drawable/ic_notification_overlay" /> 

リストビューの項目は画像です。私はsearchviewを実装したい。私はそうで。。数すなわち「1,2によっても、各ListView項目の名で例えば「ジングルベルなどを」検索したい。と。リストビューのタイトルを含む

私のjavaファイルがある。

public class carolFrag extends Fragment { 

//code 

public carolFrag() { 
    // Required empty public constructor 
} 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

} 

private static final String TAG = "carolFrag"; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup main_content, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_carol, main_content, false); 


    final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 
    final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


      Intent intent1 = new Intent (getActivity(), PackageC.class) 
      intent1.putExtra("position", position); 
      startActivity(intent1); 




     } 
    }); 
    AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
    listView.setAdapter(adapter); 

    // Inflate the layout for this fragment 



    return view; 
} 
私は買ってあげる

}

配列がドロウアブルに満ちているので、私は。

答えて

0

配列がそれにドローアブルを持っているとして、任意のロジックを作成することができません、それはデータベースのことではないか、あなたはすべてのソリューションをanithingなります私はそう思っているのですが、 String [] - ドロワブルの名前を元の順序で並べ替えます。final int [] menuImage - Stringの配列内で検索を行い、結果の位置を保存します。次に、それらの位置を使用して、新しい配列(int [])を作成し、この新しい配列にそれらの位置に一致するドロアブルを配置します。最後に、リストビューのアダプターを変更し、結果とnotifydatachange();を配列に渡します。それは視覚的に更新するためのリストビューにあります。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
main_content, @Nullable Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.fragment_carol, main_content, false); 


final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 


final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

SearchView sv = view.findviewById(R.id.searchview); 
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
      { 
       public boolean onQueryTextChange(String par1) 
       { 
        return false; 
       } 

       public boolean onQueryTextSubmit(String par1) 
       { 

         int [] searchresults = PerformSearch(par1); 
         AdapterCarols newadapter = new 
           AdapterCarols(getContext(), searchresults); 
         listView.setAdapter(adapter); 
        listview.invalidate(); // don't remember listview refresh method. I work with Recyclerview, they have a notifyDatasetChange(); method. 

       } 
     }); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


     Intent intent1 = new Intent (getActivity(), PackageC.class) 
     intent1.putExtra("position", position); 
     startActivity(intent1); 




    } 
}); 
AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
listView.setAdapter(adapter); 

// Inflate the layout for this fragment 



return view; 
} 


private int[] PerformSearch(par1) 
{ 

String [] strcarols = {carol_1_title,carol_2_title,carol_3_title,carol_4_title,carol_5_title,carol_6_title,carol_7_title,carol_8_title,carol_9_title,carol_10_title,carol_11_title}; 

int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 

int[] results = new int[]; 

int carolsresultcount = 0, index =0; 
    /// simplest way 
    for(String carol:strcarols) 
    { 
    if(carol.contains(par1)) 
     { 
     results [carolsresultcount++] = menuImage [index]; 
     } 
     index++; 
    } 

return results; 


} 

これがあなたの問題を解決できることを願っています。

+0

もう少し詳しく説明できますか? –

+0

その機能していません。ハッシュマップでそれを行うことはできますか?私はハッシュマップを覚えていない。 –

+0

carolFragのPerformSearch()は適用できません。 listView.setAdapter(adapter);のアダプタを解決できません。そして、listview.invalidate();でlistviewを解決することはできません。 String [] strcarols = {titles}のタイトルは解決できません。 –

関連する問題