[英]After filtering ListView, I'm not able to get the old position
过滤后我无法获得ListView的旧位置,例如,过滤后我应该获得3,5,8的位置,但是我得到了默认的0,1,2位置。你们有吗知道为什么吗? 这是我的代码。
public class Application_applicant_list extends AppCompatActivity {
private ListView applicant;
static String applId;
private ArrayAdapter adapter;
SearchView sv;
Bundle b;
Intent intent;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application_list);
sv = (SearchView) findViewById(R.id.appSv);
applicant = (ListView) findViewById(R.id.listView_allForms_from_list);
adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1);
applicant.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView < ? > adapterView, View view, int position, long id) {
intent = new Intent(Application_applicant_list.this, Application_form_from_list.class);
b = new Bundle();
b.putInt("position", position);
intent.putExtras(b);
Toast.makeText(getApplicationContext(), "Position:" + position,
Toast.LENGTH_SHORT).show();
startActivity(intent);
}
});
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
}
这是我从数据库检索的部分,它们属于同一类
@Override
protected void onResume() {
DBHelper db = new DBHelper(this);
ArrayList < String > ArrApp = new ArrayList < String > ();
for (int i = 0; i < db.getAll_Appl().size(); i++) {
ArrApp.add(String.valueOf(db.getAll_Appl().get(i).getApplId())); // + '\t' + '\t' + '\t' + db.getAll_IOP().get(i).getId());
}
adapter = new ArrayAdapter < String > (this, android.R.layout.simple_list_item_1, ArrApp) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView item = (TextView) super.getView(position, convertView, parent);
item.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
item.setGravity(Gravity.CENTER);
item.setPadding(0, 10, 0, 10);
return item;
}
};
applicant.setAdapter(adapter);
super.onResume();
}
}
这是我的nextActivity.java,在其中检索位置
捆绑b2 = getIntent()。getExtras(); 如果(b2!= null){int position = b2.getInt(“ position”); //位置来自感应和操作页面菜单项,单击form_from_list = db.getAll_Appl()。get(position); formAppId.setText(form_from_list.getApplId());
因为,在onItemClick
中返回的位置是ListView item
的位置,而不是list datasource (in your case it is ArrApp)
的位置list datasource (in your case it is ArrApp)
。
因此,我认为您应该获取ListView item
的值 ,然后将其传递给另一个Activity
而不是位置。
喜欢
applicant.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView < ? > adapterView, View view, int position, long id) {
String clickedItemValue = (String) adapterView.getAdapter().getItem(position); // cast to String because your list datasource is a list String
// pass clickedItemValue to another activity
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.