2016-12-02 10 views
0

私はこのオンラインの答えを見つけるために何時間も努力してきましたが、もっと見るともっと混乱します。誰かがこれで私を助けることができますか?listview onclickの元の位置を返すリストビュー

これは、アイテムを検索し、検索したアイテムをクリックできるクラスです。しかし、それは常にフィルタリングされていないリストビューの最初の位置を返し、次のインテントに間違った変数を与えます。

db = new DBAdapter(this); 
    db.open(); 

    final ArrayList<String> list = new ArrayList<String>(); 
    final ArrayList<Integer> listId = new ArrayList<>(); 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ListChosenCategory.this); 
    final int categoryId = settings.getInt("CategoryId",0); 
    Log.d("hehehe","categoryid"+categoryId); 


    //Fills out the listview with items 
    Cursor cur = db.listAllItems(categoryId); 
    if(cur.moveToFirst()) 
    { 
     do 
     { 
      list.add(cur.getString(0)); 
      listId.add(cur.getInt(cur.getColumnIndex(db.ITEMSID))); 
     } 
     while(cur.moveToNext()); 
    } 
    cur.close(); 

    final ListView listItems = (ListView) findViewById(R.id.listAllCategoryItems); 
    final StableArrayAdapter adapter = new StableArrayAdapter(ListChosenCategory.this,android.R.layout.simple_list_item_1,list,listId); 
    listItems.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
    listItems.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(final AdapterView<?> parent, final View view, final int position, long id) 
     { 
      int itemId = adapter.getActualId(position); 
      Intent intent = new Intent(ListChosenCategory.this, ListItemDetails.class); 
      PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putInt("ItemId",itemId).apply(); 
      startActivityForResult(intent,1); 
     } 
    }); 

    SearchView searchView = (SearchView)findViewById(R.id.SearchForItemText); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String text) { 
      adapter.notifyDataSetChanged(); 
      adapter.getFilter().filter(text); 
      adapter.notifyDataSetChanged(); 
      return false; 
     } 
    }); 

この

は私arrayadapterです:

プライベートクラスStableArrayAdapterは、すべてのヘルプは非常に高く評価されてArrayAdapter

HashMap<String, Integer> mIdMap = new HashMap<>(); 
    List<Integer> trialId; 

    public StableArrayAdapter(Context context, int textViewResourceId, List<String> objects, List<Integer> objectId) 
    { 
     super(context, textViewResourceId, objects); 
     for (int i = 0; i < objects.size(); i++) 
      mIdMap.put(objects.get(i), i); 
     trialId = objectId; 
    } 

    public long getItemId(int position) 
    { 
     String item = getItem(position); 
     return mIdMap.get(item); 
    } 

    public int getActualId(int position) 
    { 
     return trialId.get(position); 
    } 

拡張

// EDIT私は33をクリック

フィルタリングされたリストには、これが表示されます。これは、uの最初の行ですnfilteredリスト。私はフィルタリングされていないリストで33をクリックすると

Filtered List On Click

それは

Unfiltered List On Click

答えて

0

など、正しい変数を示し、私はあなたがobjectIdの参照を代入しているので、Javaでの変数は、オブジェクトの基準として働くと思いますtrialIdに、ArrayListを作成し、objectIdリストに入力してください。

trialId = new ArrayList<String>(objectId); 

getItemIdを使用して正しい位置を取得する

trialId.get(getItemId(position)); 
関連する問題