これは、選択したロケールのRES-文字列を取得する方法です:事前に
Locale locale = new Locale("fr");
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, null);
getResources().getString(R.string.your_string);
あなたはそれを変更する前に、地元の右のインスタンス安全べき、あなたは元の状態にリセットすることができるように。
クラス内でString
を使用している場合は、int
に変更してリソース識別子を参照する必要があります。
リストの項目の場合、後で簡単にフィルタリングするためにロケールのバージョンを保存することができます。
フィルタリングが完了しました。
あなたは、データの2つのリストが含まれている必要があり、この
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
AndroidUtils.hideKeyboard(getActivity());
return true;
}
@Override
public boolean onQueryTextChange(final String newText) {
adapter.getFilter().filter(newText);
adapter.notifyDataSetChanged();
return true;
}
});
アダプタのようなものを自分のレイアウトにSearchViewを追加し、書き込み
adapter.setFilter(filterString)
経由でアダプタにフィルタを追加する必要がありますし、濾過し、ソースを。アダプターのコンストラクターにコンテキストをプッシュし、リソースから文字列を取得します。
アダプターはFilterable
を実装する必要があります。次に、メソッドgetFilter()
をオーバーライドします。機能で
@Override
public Filter getFilter() {
return new Filter(){
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.length()>0? constraint.toString().toLowerCase():"";
FilterResults result = new FilterResults();
if (constraint.toString().length() > 0) {
ArrayList<Integer> filterList = new ArrayList<>();
for(Integer current: sourceListInAdapter){
if(getString(textForFilter).toLowerCase().contains(constraint)){
filterList.add(current);
}
}
result.values = filterList;
result.count = filterList.size();
}else {
result.values = sourceListInAdapter;
result.count = sourceListInAdapter.size();
}
return result;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
temporaryData = (ArrayList<Integer>) results.values;
//TEMPORARY data is data which is used in appearance.
notifyDataSetChanged();
}
};
}
Filter#performFiltering
検索の独自のロジックを生成します。それはこのようなものになります。私はそれをフィルタリングする方法を示しています。この場合、結果は現在のロケール結果を持つ現在の(デバイス)ロケールによって除外されます。
さらにもう1つ。ロケール検出について。これはあなたのために役立つことができます:
public String localeToString(Locale l) {
return l.getLanguage() + "," + l.getCountry();
}
public Locale stringToLocale(String s) {
StringTokenizer tempStringTokenizer = new StringTokenizer(s,",");
if(tempStringTokenizer.hasMoreTokens())
String l = tempStringTokenizer.nextElement();
if(tempStringTokenizer.hasMoreTokens())
String c = tempStringTokenizer.nextElement();
return new Locale(l,c);
}
希望、それは
を支援します