0
SQLiteデータベースからデータを取り出し、arrayListに格納してlistViewから連絡先に関する情報を表示しています。ユーザーはEditTextを入力し、TextWatcherはlistViewをフィルタリングします。しかし、これが起こると、リストビュー項目の位置は、私のonClickListenerで更新されません。TextWatcherでフィルタリングした後でListViewをクリック可能にする
私が自分のCRUD活動に送ったIDは、最初にリストされたときに自分の位置ではなくフィルタリングされた後の位置です。 ListViewアイテムをフィルタリングした後、元の位置に保持するにはどうすればよいですか?または、私のCRUD活動に正しい位置にない正しいIDを与えるより良い方法です。
public class Search extends AppCompatActivity {
// List view
private ListView lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// Search EditText
EditText inputSearch;
// ArrayList for Listview
ArrayList<String> arrayList = new ArrayList<>();
DBHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
db = new DBHelper(this);
arrayList = db.getAllContacts();
lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
lv.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
Search.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
adapter.notifyDataSetChanged();
}
});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
int id_To_Search = pos + 1;
Bundle dataBundle = new Bundle();
dataBundle.putInt(EXTRA_FLAG, id_To_Search);
// The flag value > 0 is used to signal that the upcoming operation
// is not adding, but updating or deleting
Intent intent = new Intent(getApplicationContext(), CRUDActivity.class);
intent.putExtras(dataBundle); //Intent.putExtras(Bundle extras
startActivity(intent);
}
});
}
onTextChange内のonItemClickListenerを設定することは意味がありません。位置はIDではありません。 "clicked"要素を取得する一般的な方法を使用してonItemClick内のArrayListからのみテキストを取得することができます(posListはarrayList.get(pos)ではないので、新しいフィルタされたリストをポイントします。一般的な方法はonItemClickのparentパラメータを使用することです - インターネット検索で簡単に見つかります) – Selvin
@Slevinありがとう! – KingSneaky
何のために?それはほんの少しのヒントでした... – Selvin