繁体   English   中英

过滤ListView之后,我无法获得旧位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM