2013-12-09 68 views
7

適配器工作正常,但我不明白爲什麼在OnItemClick位置始終爲「0」AutoCompleteTextView OnItemClick位置始終爲「0」

String[] regions = ct.getRegions(); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line, regions); 
    regionT.setAdapter(adapter); 
    regionT.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      // TODO Auto-generated method stub 
       int pos=position; 
     } 
    }); 

回答

17

不要問我爲什麼,但在方法OnItemClickListener.onItemClick參數position相對AutoCompleteTextView的下拉列表索引持有,不在你的適配器陣列中的位置(在你的案例regions)!

所以,找到該項目的實際position你得在下拉列表中選擇的字符串,找到其索引的轉接器陣列中:

String[] regions = ct.getRegions(); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, regions); 
regionT.setAdapter(adapter); 
regionT.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String selected = (String) parent.getItemAtPosition(position); 
     int pos = Arrays.asList(regions).indexOf(selected); 
    } 
}); 
+1

如果你的'ArrayAdapter's'類型是一個對象,你可以使用'Object object =(Object)parent.getItemAtPosition(position);' – surfer190

+1

來分配它,如果position始終爲0,那麼這個函數是如何工作的呢? 我和原來的海報有同樣的問題。 – user535927

-1

我把這個簡單的例子,它能夠正常工作爲了我。請看下圖:

package com.example.autocompletetv; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 

public class AutoCompleteActivity extends ListActivity { 

    public static final String TAG = AutoCompleteActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_auto_complete); 

     String[] regions = {"One", "Two", "Three", "Four", "Five"}; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_dropdown_item_1line, regions); 
     this.setListAdapter(adapter); 

     this.getListView().setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Log.i(TAG, "postion was " + position); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.auto_complete, menu); 
     return true; 
    } 

} 

當我點擊我得到:

12-09 19:13:30.617: I/AutoCompleteActivity(1883): postion was 2 
12-09 19:13:31.997: I/AutoCompleteActivity(1883): postion was 3 
12-09 19:13:34.687: I/AutoCompleteActivity(1883): postion was 4 
12-09 19:13:37.028: I/AutoCompleteActivity(1883): postion was 0 
+0

奇怪的是,它並沒有在我的應用程序工作 –

+0

你不」包含一整套代碼,但可能是regionT不是設置偵聽器的正確對象。你在使用ListActivity嗎? –