A.A
A.A

Reputation: 1148

How i can have a filtered item on a listview with constant item position?

How i can have a listView with constant item position ?

Suppose you have a listview with a searchbox on actionbar. Now you want to filter the results and also want the position number of the item to be constant even after filtering.

The below code give me different position when i am searching on 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);
    }
}

Upvotes: 0

Views: 250

Answers (2)

user2396269
user2396269

Reputation:

In ActionBarActivity write :

int ID = 0;

In onItemClick write :

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();

Good luck.

Upvotes: 1

nyarlathotep77
nyarlathotep77

Reputation: 181

You can put an index or position as part of your data model.

Upvotes: 0

Related Questions