2013-11-15 35 views
0

在ListView上練習時,我想也爲它添加按鈕,而不是隻顯示內容。但在我的實施中,按鈕根本沒有做任何事情ListView(按鈕沒有運行)

另外我很困惑我是否可以得到點擊按鈕的位置。現在我只是發送在OnItemClick內部聲明的toSend。

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 
      final int toSend = position; 
      TextView refId = (TextView)view.findViewById(R.id.list_id); 
      TextView refName = (TextView)view.findViewById(R.id.list_name); 
      TextView refAdd = (TextView)view.findViewById(R.id.list_address); 
      Button edit = (Button)view.findViewById(R.id.edit); 
      edit.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        // TODO Auto-generated method stub 
        Intent i = new Intent(ListActivity.this, EditLayout.class); 
        i.putExtra("position", toSend); 
        startActivity(i); 
       } 
      }); 
      String sd_id = refId.getText().toString(); 
      String sd_name = refName.getText().toString(); 
      String sd_add = refAdd.getText().toString(); 
      buildAlert(sd_id, sd_name, sd_add); 
     } 
    }); 
+1

我相信這是你要找的內容: http://stackoverflow.com/questions/1709166/android-listview-元素與多個可點擊的按鈕?rq = 1 – Bedimindtricks

回答

1

你非常接近。當您創建列表行視圖(包含id,名稱,地址,編輯的視圖)時,需要發生「內部」setOnClickListener。

你可以在getView()期間做到這一點。但是,在哪裏發送點擊?而不是創建一個新的onClickListener,使用「this」(你的活動)。在活動中放置一個onClick()處理程序。

然後,當你點擊一下,onClick方法就會執行。下一個問題:你怎麼知道點擊哪一行?想到最簡單的方法是給這個按鈕一個不同的編號 - 使用行索引(你可能需要從1開始而不是0 - 被警告)。

最後,給定行ID,很容易啓動您的「嵌套」活動。

希望這會有所幫助。

(稍後添加) 我這樣做;你需要定義一個佈局的行觀點:

class MyActivity extends Activity implements View.OnClickListener 
{ 
    public void onCreate (Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView (R.layout.my_page); 

    ListView list = (ListView)findViewById (android.R.id.list); 
    MyArrayAdapter adapter = new MyArrayAdapter (this, <your array of data>); 
    list.setAdapter (adapter); 
    } 

    @Override 
    public void onClick(View v) 
    { 
    int buttonId = v.getId(); 
    if (buttonId is within range) 
     ... do what you need to do with the click ... 
    } 

    private class MyArrayAdapter extends ArrayAdapter<MyData> 
    { 
    private Activity act; 

    //----------------------------------------------------------------------------- 
    public MyArrayAdapter (Activity act, MyData array) 
    { 
     super (act, R.layout.list_row, array); 
     this.act = act; 
    } 

    //----------------------------------------------------------------------------- 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) 
    { 
     ViewGroup rowView = (ViewGroup)convertView; 
     if (rowView == null) 
     { 
     LayoutInflater inflater = act.getLayoutInflater(); 
     rowView = (ViewGroup) inflater.inflate (R.layout.list_row, 
               parent, false); 
     } 

     Button button = (Button)rowView.findViewById (R.id.is_member); 
     button.setId (position+1); // add one to avoid 0 as an id. 
     button.setOnClickListener (act); 

     // set field values here -- not shown 

     return rowView; 
    } 
    } 
} 
+0

我得到你在說什麼......但這需要一個自定義視圖嗎?我目前正在使用'SimpleCursorAdapter'。這通用適配器內部可能嗎? –

+0

自定義適配器* –

+1

是的,你可以;我用示例代碼更新了我的答案。它可能會有一些語法錯誤,因爲我從我的應用程序中剪切並粘貼了它,並刪除了不相關的部分。哦,我的例子是由ArrayAdapter構建的,但它也可以擴展SimpleCursorAdapter。 –