2016-01-06 112 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。这是不能自定义的,当你点击整行被选中。