2011-05-11 77 views
0

我是Android新手,所以這可能看起來像一個基本問題。但我得到的是一個非常簡單的類SingleItem,它有一個整數和一個字符串以及一個getter和setter。在我的應用程序中,我得到了一個包含SingleItem對象集合的ArrayList。我也有一個帶有ListView小部件的佈局。關於簡單Android ListView問題的幫助

我想要做的是用SingleItem中的我的字符串值填充ListView,但是當用戶從ListView中選擇一個項目時,我需要該SingleItem值的整數ID。我如何在Android開發中做到這一點?

回答

1

如果您使用自己的適配器來填充列表,那麼在構建視圖返回時,可以在getView()函數中調用setTag(),並存儲整個「SingleItem」對象。然後,在返回的視圖的onClickListener中,可以使用已單擊的視圖的getTag()方法檢索您的信息。

編輯: 指定其onClickListener我指的是

+0

onCLickListener是用於選擇整個listview。要返回特定項目的項目,您應該使用OnItemSelectedListener – jkhouw1 2011-05-11 02:02:37

+0

oi我喜歡downvotes ...我在getView()函數中使用1 onClickListener,在getView()函數中,我只需設置視圖的onClickListener,然後返回到適配器中的1個onClickListener()。這很好,因爲我能夠使用setTag()存儲所需的所有數據。() – snctln 2011-05-11 04:37:10

0

這裏是一堆僞代碼:創建自己的適配器。這樣可以靈活地做各種事情,但對你來說很重要,它只顯示你的自定義類中的相關字段,並製作更復雜的列表視圖。一個體面的教程是在這裏:http://developerlife.com/tutorials/?p=327

你將不得不處理baseadapter的其他替代,但關鍵是分配singleItem.getString()

public class SingleItemAdapter extends BaseAdapter{ 
    private ArrayList<SingleItem> m_items= new ArrayList<SingleItem>(); 
      private Context mContext; 
      public SingleItemAdapter (Context c,ArrayList<SingleItem> items) { 
     mContext = c; 
     m_items= items; 
    } 
. 
. 
. 

    @Override 
    public Object getItem(int arg0) { 
     return m_items.get(arg0); 
    } 

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

      View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.singleitemview, null); 
     } 
      SingleItem i=(SingleItem) getITem(position) 
      if(v!=null){ 
       TextView tv=(TextView) v.findViewById(R.id.yourListItemView); 
       tv.setText(i.getStringValue()); 
} 

} 
} 

的價值定義自定義適配器之後,你就可以將其分配給列表視圖並將偵聽器分配給OnItemSelectedListener。因爲這會返回位置,所以可以將它綁定到SingleItems的ArrayList中的位置。

. 
. 
. 
SingleItemAdapter sia=new SingleItemAdapter(this,yourArray); 
yourArrayList.setAdapter(sia); 
yourArrayList.setOnItemSelectedListener(new OnItemSelectedListener() { 
@Override 
    public void onItemSelected(AdapterView<?> parent, View v, int position, long row) { 
      SingleItem si= yourArray.getItem(position); 
      //do something with si.getValue(); 

} 

. 
. 
. 

}); 
+0

給工作代碼片段不是人們學習jk的方式。正確的方法是給他們一些解釋,然後給出一些代碼片段,任何人都可以查找示例..但只有少數人會理解它。然後由程序員學習如何適應他們正在使用的內容並給出它的上下文。永遠不要複製和粘貼程序員,它會毀掉你作爲程序員。總是提出問題,不要僅僅因爲它是什麼。明白它。 – JoxTraex 2011-05-11 01:43:32

+0

好點。我不認爲這太複雜,並且會指向正確的方向。我會用更多的顏色編輯帖子。 – jkhouw1 2011-05-11 01:45:23

+0

謝謝,這是一個學習/故障排除環境,而不是解決方案中心。 – JoxTraex 2011-05-11 01:47:02