2014-11-04 145 views
0

listview中的按鈕不會觸發onclick事件,但是如果我單擊它所做的行。listview中的按鈕不會觸發onclick事件

我有一個列表視圖在fragment。列表視圖中的每一行都有2 buttonstextview。問題是,如果我點擊textview該事件被解僱,但如果我點擊按鈕,事件不會被解僱。我只有我的數據適配器中的字符串,因爲我正在處理文件,那就是文件名。這些按鈕將是對文件的操作。

這裏是適配器(我沒有爲數據適配器類,我必須?)

public class fileExplorerAdapter extends ArrayAdapter<String> { 
     private ArrayList<String> items; 

     public fileExplorerAdapter(Context context, int textViewResourceId, ArrayList<String> items) { 
       super(context, textViewResourceId, items); 
       this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
        LayoutInflater vi = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.file_explorer_cell, null); 
       } 
       String fileName = items.get(position); 
       TextView tt = (TextView) v.findViewById(R.id.txtViewFileName); 
       tt.setText(fileName); 

       return v; 
     } 
} 

這裏是在片段中的事件設置

// ListView Item Click Listener 
listView.setOnItemClickListener(new OnItemClickListener() { 

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

      Log.d("debug", "in item clicked"); 

      // ListView Clicked item index 
      int itemPosition = position; 

      // ListView Clicked item value 
      String itemValue = (String) listView 
        .getItemAtPosition(position); 

      // Show Alert 
      Toast.makeText(
        rootView.getContext(), 
        "Position :" + itemPosition + " ListItem : " 
          + itemValue, Toast.LENGTH_LONG).show(); 

     } 

    }); 
+0

你的按鈕代碼在哪裏?它不會觸發任何與該代碼相關的按鈕。 – 2014-11-04 01:29:58

+0

可以讓我看看你的xml嗎? – 2014-11-04 05:17:23

+0

檢查[這](http://stackoverflow.com/questions/20208285/listview-itemclick-not-work/20208788#20208788),可能你會得到一些幫助。 – Dev 2014-11-04 05:59:14

回答

0

我沒有看到你的代碼中的任何按鈕。甚至沒有eventlistener除了列表中的項目(在你的情況下是一個textview)。從這個角度來看,您提供的代碼完全符合您的說法。

2

您需要爲您的TextViewButton s創建單獨的View.OnClickListener

如果您有OnItemClickListener,則只有整個項目視圖纔會響應點擊事件。

所以,你應該做的,而不是像這樣:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.file_explorer_cell, null); 
    } 
    String fileName = items.get(position); 

    // hook up text view 
    TextView tt = (TextView) v.findViewById(R.id.txtViewFileName); 
    tt.setOnClickListener(textview_onclick);   

    // hook up button one 
    Button button1 = (Button) v.findViewById(R.id.button1); 
    button.setOnClickListener(button_onclick); 

    // hook up button two 
    Button button2 = (Button) v.findViewById(R.id.button2); 
    button.setOnClickListener(button_onclick2); 

    tt.setText(fileName); 

    return v; 
} 

並取出OnItemClickListener。

作爲一個附註,當convertView爲null時,您應該爲每行中的各個小部件設置偵聽器。即只需在第一次創建時設置它們即可。

0

請仔細閱讀android編程的基礎知識。

onItemClick偵聽器響應列表行的單擊事件,而不是按鈕。

首先在getView方法中指定按鈕偵聽器。代碼中沒有按鈕的事件偵聽器。