2016-05-03 38 views
0

我在list_item.xml中添加了一個按鈕,並且我的setOnDataSelectionListener(OnDataSelectionListener偵聽器)似乎無法工作。我所做的只是將一個按鈕添加到LinearLayout,並且偵聽器停止工作。添加按鈕後是否需要執行某些操作?Android - 添加按鈕會導致自定義偵聽器無法工作

list_item.xml:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:clickable="true" 
    > 
    <ImageView 
     android:id="@+id/iconItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="8dp" 
     android:layout_gravity="center_vertical" 
     /> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_alignParentLeft="true" 
     > 
     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      > 
      <TextView 
       android:id="@+id/dataItem01" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#ff888888" 
       android:textSize="12dp" 
       android:textStyle="bold" 
       /> 
      <TextView 
       android:id="@+id/dataItem02" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:textColor="#ccf88107" 
       android:textSize="10dp" 
       android:textStyle="bold" 
       android:paddingRight="4dp" 
       android:clickable="true" 

       /> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="New Button" 
       android:id="@+id/button" /> 

     </RelativeLayout> 

     <TextView 
      android:id="@+id/dataItem03" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#191775" 
      android:textSize="12dp" 
      android:padding="4dp" 
      /> 

    </LinearLayout> 
</LinearLayout> 

MainActivity:

statusList = (StatusListView) findViewById(R.id.statusList); 
statusAdapter = new StatusListAdapter(this, mHandler); 
statusList.setAdapter(statusAdapter); 
statusList.setOnDataSelectionListener(new OnDataSelectionListener() { 
     @Override 
     public void onDataSelected(AdapterView parent, View v, int position, long id) { 
      Status curItem = (Status) statusAdapter.getItem(position); 
      String curText = curItem.getText(); 
      Log.d(TAG, "display curtext"); // no log displayed 
      Toast.makeText(getApplicationContext(), curText, Toast.LENGTH_LONG).show(); // obviously no toast message 
     } 
    }); 

LayoutInflater inflater = this.getLayoutInflater(); 
LinearLayout list_item = (LinearLayout)inflater.inflate(R.layout.list_item, null); 
Button deleteBtn = (Button)list_item.findViewById(R.id.deleteBtn); 
deleteBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d(TAG, "delete button clicked"); 

      statusList.setOnDataSelectionListener(new OnDataSelectionListener() { 
       @Override 
       public void onDataSelected(AdapterView parent, View v, int position, long id) { 
        Log.d(TAG, "delete button clicked inside onDataselected"); 

        DeleteStatusThread thread = new MainActivity.DeleteStatusThread(id); 
        thread.start(); 
       } 
      }); 

StatusListView:

public class StatusListView extends ListView { 

private OnDataSelectionListener selectionListener; 

public StatusListView(Context context) { 
    super(context); 

    init(); 
} 

public StatusListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    init(); 
} 

public void init() { 
    setOnItemClickListener(new OnItemClickAdapter()); 
} 


class OnItemClickAdapter implements OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     if (selectionListener == null) { 
      return; 
     } 
     selectionListener.onDataSelected(parent, view, position, id); 
    } 
} 

public void setOnDataSelectionListener(OnDataSelectionListener listener) { 
    selectionListener = listener; 
} 

public void setAdapter(BaseAdapter adapter) { 
    super.setAdapter(adapter); 
} 


public BaseAdapter getAdapter() { 
    return (BaseAdapter) super.getAdapter(); 
} 

}

+0

你在哪裏設置了你的活動中的按鈕? MainActivity中的 – Abhishek

+0

。我更新了MainActivity.class中的代碼 –

+0

使用setOnItemSelectedListener進行列表查看也請參閱[this](http://stackoverflow.com/questions/12293615/setonitemclicklistener-vs-setonitemselectedlistener-in-listview) –

回答

0

如果列表中的任何行項目包含可聚焦或可點擊的視圖,則OnItemClickListener將不起作用。

行項目必須有一個像機器人設置了一個param:descendantFocusability = 「blocksDescendants」

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:baselineAligned="false" 
android:descendantFocusability="blocksDescendants" 
android:gravity="center_vertical" > 

// your other widgets here 

</LinearLayout> 

設置任何可獲得焦點或可點擊查看在此項目將用:如果您添加的

android:clickable="false" 
android:focusable="false" 
android:focusableInTouchMode="false" 
+0

感謝您的信息。我將這些行添加到list_item.xml,但問題仍然存在:( –

0

按鈕list_item.xml你不會初始化那裏的按鈕,因爲MainActivity,因爲我認爲它不是MainActivity的佈局文件。相反,您應該使用LayoutInflater在MainActivity中填充list_item.xml佈局。另外,我不明白,你初始化按鈕或在MainActivity聲明,但這樣做時,所以它是

Button buttonExample = (Button)findViewById(R.id.btn_id_from_xml); 

然後你可以使用不要忘記一個onClickListener

buttonExample.setOnClickListener(this); 

我通常做一個onClickListener方法帶有一個switch case,它改變了基於點擊onClickListener的按鈕的id的情況。祝你好運!

+0

感謝您的帖子Josh。事實上,我確實在MainActivity中爲list_item.xml充了氣。如果我正確地使用它,您能驗證它嗎? –

+0

是的,對不起在添加更多代碼之前,我開始輸入我的回答,您應該初始化並聲明您的LayoutInflater對象,如下所示:LayoutInflater inflater =(LayoutInflater)context.getSystemService (Context。();} –

+0

這裏是我自己代碼中的一個實例 '@Override public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater();如果(adsRemoved){menu.findItem(R.id.btn_ads).setEnabled(false); } inflater.inflate(R.menu.menu,menu); 返回true; }' 這使得一個基於我在我的菜單目錄中命名爲menu.xml的xml資源的操作欄。 另外,我看到你創建了你的LayoutInflater對象,但是我沒有看到你在創建它後調用了這個膨脹對象,比如我上面的例子:'inflater.inflate(R.menu.menu,menu);' –

0

android:focusable="false"設置爲list_item.xml中的按鈕。

+0

它似乎沒有解決這個問題。列表項目仍然不可點擊 –

相關問題