0

我有這個自動完成類,我正在修改適配器,這樣,而不是僅僅文本,它會在出現的文本前面顯示一個圖標。所有可用選項都存儲在一個字符串數組中。Android自動完成功能不能正常工作。

現在,由於某種原因,無論我輸入什麼,它只顯示5個項目。

public class AutoCompleteText extends Activity{ 

public class CustomAdapter extends ArrayAdapter<String>{ 

    public CustomAdapter(Context context, int textViewResourceId,String[] objects) { 
     super(context, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = getLayoutInflater(); 
     View row = inflater.inflate(R.layout.arow,parent, false); 
     TextView label = (TextView) row.findViewById(R.id.element); 
     label.setText(listItems[position]); 
     ImageView icon = (ImageView) row.findViewById(R.id.image); 

     if("Item1".equals(listItems[position])|| something else || something else){ 
      icon.setImageResource(R.drawable.img1); 
     } 
     else if("Item2".equals(listItems[position])|| something else || something else){ 
      icon.setImageResource(R.drawable.img2); 
     } 
     else if("Item3".equals(listItems[position])|| something else || something else){ 
      icon.setImageResource(R.drawable.img3); 
     } 
     else if("Item4".equals(listItems[position])|| something else || something else){ 
      icon.setImageResource(R.drawable.img4); 
     } 
     else if("Item5".equals(listItems[position])|| something else || something else){ 
      icon.setImageResource(R.drawable.img5); 
     } 
     else if("Item6".equals(listItems[position])|| something else || something else) { 
      icon.setImageResource(R.drawable.img6); 
     } 
     else{ 
      icon.setImageResource(R.drawable.whatever); 
     } 
     return row; 
    } 
} 


AutoCompleteTextView acTextView; 
private static String listItems[] = { "Item1", "Item2","Item3","Item4","Item5", "Item6", "Item7", "Item8", "Item9", "Item10" 
             "Item11", "Item12","Item13","Item14","Item15", "Item16", "Item17", "Item18", "Item19", "Item20"); 

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

    acTextView = (AutoCompleteTextView)findViewById(R.id.searchfield); 
    acTextView.setThreshold(1); 
    acTextView.setAdapter(new CustomAdapter(AutoCompleteText.this,R.layout.arow, listItems)); 
    acTextView.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       try { 
        //random staff 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

    ); 
} 

}

應用程序編譯並沒有任何錯誤,運行良好。誰可以幫我這個事? 謝謝。

回答

0

不會比較String s與==因爲檢查它是否相同對象不是相同的文本。改爲使用.equals

if ("Item6".equals(listItems[position]) { 

它可能在你的情況下工作,因爲編譯器可能會聰明地使用同一個對象來表示文字,但它通常不是一個好主意。

此外,您的代碼中只有5個(+默認)項目。你看到那些嗎?

+0

向所有字符串檢查添加了.equals(listItems [position]),但仍然無效。我只能看到選定的元素,例如Item1,Item2,Item4,Item5。謝謝 – 2012-04-15 22:30:16

+0

你究竟看到了什麼?包含20個項目的列表,顯示錯誤的圖標或文本或僅列出5個項目? – zapl 2012-04-15 22:33:55

+0

我看到陣列的前7個元素。他們的圖標是正確的。我在其他類中使用這個自定義適配器類,它工作正常... – 2012-04-15 22:56:08