0
こんにちは私は短いリストの中で結果をフィルタリングするsearchviewを持っています。私は現在、表示する必要があるものを読み込むために、次のアクティビティに渡すために整数を使用します。しかし、あなたが検索すると、あなたが検索したアイテムは最初のアイテムとなる位置0になります。だから私はこれのためのユニークなIDシステムをセットアップするか、これを呼び出す方法がありますか?SearchView with ListViewはアイテムの位置を変更し、他のアクティビティの正確なアイテムIDが必要です
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_clinics);
listView = (ListView) findViewById(R.id.listView);
final ArrayList<String> clinicInfoArrayList = new ArrayList<String>();
clinicInfoArrayList.add("Phoenix Urgent Care \n 3931 E Camelback Rd, Phoenix, AZ 85018");
clinicInfoArrayList.add("Pain Stop North Phoenix Clinic \n 3329 East Bell Road, Suite A2-A5, Phoenix, AZ 85032");
clinicInfoArrayList.add("The Little Clinic \n 2727 W Bell Rd, Phoenix, AZ 85053");
clinicInfoArrayList.add("Native Health \n Building C, 4041 N Central Ave, Phoenix, AZ 85012");
clinicInfoArrayList.add("Allied Clinic, PLLC \n 1147 E Glendale Ave, Phoenix, AZ 85020");
clinicInfoArrayList.add("Neighborhood Clinic \n 1929 W Fillmore St, Phoenix, AZ 85009");
clinicInfoArrayList.add("MinuteClinic \n 4742 E Indian School Rd, Phoenix, AZ 85018");
mSearchView = (SearchView) findViewById(R.id.menu_search);
listView.setTextFilterEnabled(true);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
clinicInfoArrayList);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position,
long arg3) {
Intent intent = new Intent(SearchClinics.this,ClinicInfoView.class);
int something = (int)arrayAdapter.getItemId(position);
intent.putExtra("Another", something);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search_menu, menu);
SearchManager searchManager = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
mSearchView = (SearchView) searchMenuItem.getActionView();
mSearchView.setSearchableInfo(searchManager.
getSearchableInfo(getComponentName()));
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setQueryHint("Search Here");
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
listView.clearTextFilter();
} else {
listView.setFilterText(newText.toString());
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
itemIdの代わりにオブジェクトを渡すと、getItemId()はitemの位置を返します。 'onItemClick'の中の' clinicInfoArrayList.get(position) 'のリストからオブジェクトを取得できます。 –
問題は、positionは、SearchViewからテキストがフィルタリングされたときに変更される数値です。したがって、例えばリストビュー項目番号5では、リストビューは検索された項目のみを表示するので、位置値に基づいて項目番号0になります。だからポジションは、いつも間違ったものを与えるので、これの中では役に立たない。 –
診療所の名前が一意の場合は、ループして名前の一致を確認し、オブジェクトを取得します。 –