【问题标题】:How i can have a filtered item on a listview with constant item position?如何在具有恒定项目位置的列表视图上过滤项目?
【发布时间】:2014-06-14 12:30:30
【问题描述】:

我怎样才能拥有一个具有恒定项目位置的listView

假设您有一个listview,在actionbar 上有一个searchbox。现在您要过滤结果,并且还希望项目的position 编号即使在过滤后也保持不变。

当我在listView 上搜索时,下面的代码给了我不同的位置:

public class About extends ActionBarActivity {
      private ListView mainListView ;  
      private ArrayAdapter<String> listAdapter ;
      SearchView searchview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        //searchview = new SearchView(getSupportActionBar().getThemedContext());

        mainListView = (ListView) findViewById( R.id.mainListView );
        String[] mTitles = getResources().getStringArray(R.array.lstview_Content);
        String[] values= new String[5];
        for(int i=0;i<values.length;i++){
            values[i] = mTitles[i];
        }
        ArrayList<String> planetList = new ArrayList<String>();
        planetList.addAll( Arrays.asList(values) );
        listAdapter = new ArrayAdapter<String>(About.this, R.layout.lstview_layout,R.id.rowTextView, planetList);
         mainListView.setAdapter( listAdapter );
         mainListView.setOnItemClickListener(new OnItemClickListener() {
             @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {
                int itemposition = position;
                String itemvalue = (String) mainListView.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(),
                        "Position :"+itemposition+"  ListItem : " +itemvalue , Toast.LENGTH_LONG).show();
            }
        });
         mainListView.setTextFilterEnabled(true);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }



    @Override
    public boolean onCreateOptionsMenu (Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.about, menu);
        MenuItem searcehItem = menu.findItem(R.id.action_search);
        searchview = (SearchView) MenuItemCompat.getActionView(searcehItem);
        searchview.setQueryHint("ُُSearch");
        searchview.setOnQueryTextListener(new OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String arg0) {

                return false;
            }
            @Override
            public boolean onQueryTextChange(String arg0) {
                mainListView.setFilterText(arg0);
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }
}

【问题讨论】:

    标签: java android android-listview android-actionbar android-search


    【解决方案1】:

    ActionBarActivity 写:

    int ID = 0;
    

    onItemClick 写:

    for (int i = 0; i < values.length; i++) {
        if(values[i] == itemvalue)
        {
                ID = i;
            }
    }
    Toast.makeText(getApplicationContext(),"Position :"+ID+"  ListItem : " +itemvalue , Toast.LENGTH_LONG).show();
    

    祝你好运。

    【讨论】:

      【解决方案2】:

      您可以将索引或位置作为数据模型的一部分。

      【讨论】:

      • 我需要动态定位。
      • 你能提供一个你的要求的例子吗?
      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2010-11-23
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多