2011-12-23 158 views
32

我在做類似如下如何在ArrayAdapter上設置onClickListener?

// All necessary imports are here 

public class More extends Activity { 

    String[] MoreItems = { "Transfers", "Budgets", "Branches", "Tools", "News", 
      "Customer Service", "Settings", "Help", "About" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.more_view); 

     ListView moreListView = (ListView) findViewById(R.id.moreListView); 
     MoreListAdapter listAdapter = new MoreListAdapter(); 
     moreListView.setAdapter(listAdapter); 

     // accountsTypeListView.setOnItemClickListener(listClickListner); 
    } 

    class MoreListAdapter extends ArrayAdapter<String> { 
     MoreListAdapter() { 
      super(More.this, R.layout.list_item, MoreItems); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View row; 

      if (convertView == null) { 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.list_item, parent, false); 
      } else { 
       row = convertView; 
      } 
      TextView tv = (TextView) row.findViewById(R.id.textItem); 

      tv.setText(getItem(position)); 

      return row; 
     } 
    } 
} 

它將生成清單,我想打電話各自點擊相應的活動,比如如果用戶單擊傳輸,然後它會顯示傳遞活動, 我怎樣才能調用onClickListener列表,以及如何在點擊時啓動Activity。

+0

你要設置的OnClickListener您的ListView的每個項目或爲TextViews每件物品還是什麼? – Houcine 2011-12-23 11:23:01

+0

row.setOnClickListener(this); ..... startActivity(this,someIntent); – Blundell 2011-12-23 11:24:46

回答

39

你也可以做這樣的..

moreListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Log.d("############","Items " + MoreItems[arg2]); 
      } 

     }); 
+2

將此直接放置在您已將適配器設置在moreListView.setAdapter(listAdapter); – localhost 2013-04-16 13:42:31

+0

好.. :)工作真的很好..thankyou .. – Lal 2015-10-13 04:11:57

1

你的「更多」類必須擴展ListActivity而不是活動,那麼您可以覆蓋onListItemClick

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the arrya 
} 

編輯:忘了說了,在你的佈局你的ListView上被稱爲:機器人:ID =「@機器人:ID /列表」

+0

以及如何在每個項目上設置onClick偵聽器? – 2011-12-23 11:25:00

+0

每個項目都會收到點擊。你只需知道哪一個使用點擊物品的位置,例如MoreItems [position] – Johann 2011-12-23 11:26:07

+0

,我們應該實現onclicklistner還是不? – 2011-12-23 11:27:57

45

有兩個選項來處理事件點擊每個行。

1)如果您的課程延伸ListActivity,您可以重寫以下方法。

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the array 
} 

2)手柄單擊getView()方法

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - 考慮到兩種情況..! – 2011-12-23 11:33:10

+0

第二種方法在onclik方法之後在列表視圖中搜索/刷新項目時崩潰,同時在onclick方法內調用intent!任何解決方案?..問題出現在我們使用我們自己的搜索過濾器。 – 2013-01-15 08:25:34

+0

@Subra沒有代碼,沒有人能理解你的問題。最好用一些必要的代碼來提出一個新問題。 – Dharmendra 2013-01-15 11:11:09

10

例如行的事件:

ListView lv = getListView(); 

     lv.setAdapter(listAdapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 

       Intent i = new Intent(More.this, NextActvity.class); 
       //If you wanna send any data to nextActicity.class you can use 
       i.putExtra(String key, value.get(position)); 

      startActivity(i); 
      } 
      }); 
相關問題