2016-01-06 102 views
1

我想單擊ListView中某個項目的按鈕,它應該與單擊整個項目具有相同的效果。但是當我點擊按鈕什麼也沒有發生,當我點擊圖像時,它的所有Okey。如何解決它? 我試圖設置按鈕: android:focusable =「true」 android:clickable =「true」 我也嘗試過使用android:descendantFocusability。ListView中的按鈕不可點擊

我的任何嘗試都沒有使按鈕可點擊。

my_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:descendantFocusability="blocksDescendants" 
> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:layout_toLeftOf="@+id/imageArrow" 
    android:layout_toStartOf="@+id/imageArrow" 
    /> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageArrow" 
    android:layout_alignTop="@+id/button" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:background="@drawable/r_arr" /> 
</RelativeLayout> 

MainActivity.java

public class MainActivity extends ListActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
// setContentView(R.layout.activity_main); 
    ListView listView = (ListView)findViewById(R.id.listView); 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
      "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
      "Linux", "OS/2" }; 
    MyCustomAdapter adapter = new MyCustomAdapter(this, values); 
    setListAdapter(adapter); 
    } 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    String item = (String) getListAdapter().getItem(position); 
    Toast.makeText(this, item + " selected", Toast.LENGTH_SHORT).show(); 
} 
} 

MyCustomAdapter.java

public class MyCustomAdapter extends ArrayAdapter<String> { 
private final Activity context; 
private final String[] names; 

static class ViewHolder { 
    public TextView myButton; 
    public ImageView image; 
} 

public MyCustomAdapter(Activity context, String[] names) { 
    super(context, R.layout.my_item, names); 
    this.context = context; 
    this.names = names; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    // reuse views 
    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.my_item, null); 
     // configure view holder 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.myButton = (Button)rowView.findViewById(R.id.button); 
     viewHolder.image = (ImageView)   rowView.findViewById(R.id.imageArrow); 
     viewHolder.myButton.setFocusable(false); 

     rowView.setTag(viewHolder); 

    } 

    // fill data 
    ViewHolder holder = (ViewHolder) rowView.getTag(); 
    String s = names[position]; 
    String abs=Integer.toString(position + 1); 
    holder.myButton.setText(s+ " number " + abs); 


    holder.image.setImageResource(R.drawable.r_arr); 
    return rowView; 
} 
} 
+0

初始化您的適配器的getview方法內的按鈕。 – karimkhan

+1

您只處理該行的點擊。那是你要的嗎 ? – Blackbelt

+1

您的按鈕沒有android:onClick或onClickListener。因此,單擊它時不會發生任何事情。 – gbhall

回答

0

你只需要配置的onClick方法是這樣的:

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //your code goes here 
      } 
     }); 
0

請在您的按鈕上寫onclicklistener。

0

在getView

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    // reuse views 
    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.my_item, null); 

     // configure view holder 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.myButton = (Button) rowView.findViewById(R.id.button); 
     viewHolder.image = (ImageView) rowView.findViewById(R.id.imageArrow);   
     viewHolder.myButton.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // Button click functionalty here 
      }); 

     rowView.setTag(viewHolder); 

    } 

    // fill data 
    ViewHolder holder = (ViewHolder) rowView.getTag(); 
    String s = names[position]; 
    String abs=Integer.toString(position + 1); 
    holder.myButton.setText(s+ " number " + abs); 

    holder.image.setImageResource(R.drawable.r_arr); 
    return rowView; 

    } 
} 

認沽按鈕點擊監聽器,讓您既列表視圖項和按鈕點擊,做到這一點。

化妝的ListView可聚焦機器人:可調焦= 「真」

按鈕不是在您的自定義列表視圖項可聚焦機器人:可調焦= 「假」

0

方法1:

首先更換按鈕代碼在xml如下 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:focusable="false" android:onClick="onClick" android:focusableInTouchMode="false" android:layout_toLeftOf="@+id/imageArrow" android:layout_toStartOf="@+id/imageArrow" />

然後去你的活動和編寫代碼如下

public void onClick(View v) 
    { 
     super.onClick(v); 
     if (v.getId() == R.id.button) 
     { 
      //your code goes here 
     } 
    } 

或您可以添加以下代碼和平在你的OnCreate

方法2:

Button button = (Button) findViewById(R.id.button); 

    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     } 
    }); 
0

不建議有兩個點擊聽衆對同一行項目在listview中。

  1. 您可以在列表視圖自定義適配器。您可以根據您的要求進行自定義。

  • 可以在你的活動/片段列表視圖onclicklistener。這是不能自定義的,當你點擊整行被選中。