Java ListView中的按钮不可单击
我想单击ListView项目内的按钮,它应该与单击整个项目具有相同的效果。但当我点击按钮时什么也没发生,当我点击图像时一切正常。如何修复它? 我试着在按钮上设置: android:focusable=“true” android:clickable=“true” 我还尝试了android:后代聚焦 我没有一次尝试使按钮可点击 my_item.xmlJava ListView中的按钮不可单击,java,android,listview,Java,Android,Listview,我想单击ListView项目内的按钮,它应该与单击整个项目具有相同的效果。但当我点击按钮时什么也没发生,当我点击图像时一切正常。如何修复它? 我试着在按钮上设置: android:focusable=“true” android:clickable=“true” 我还尝试了android:后代聚焦 我没有一次尝试使按钮可点击 my_item.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro
<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>
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;
}
}
公共类MyCustomAdapter扩展了ArrayAdapter{
私人最终活动背景;
私有最终字符串[]名称;
静态类视窗夹{
公共文本查看我的按钮;
公众形象;
}
公共MyCustomAdapter(活动上下文,字符串[]名称){
super(上下文、R.layout.my_项、名称);
this.context=上下文;
this.names=名称;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
//重用视图
if(rowView==null){
LayoutInflater充气器=上下文。getLayoutInflater();
rowView=充气机。充气(R.layout.my_项,空);
//配置视图保持架
ViewHolder ViewHolder=新ViewHolder();
viewHolder.myButton=(Button)rowView.findViewById(R.id.Button);
viewHolder.image=(ImageView)rowView.findviewbyd(R.id.imageArrow);
viewHolder.myButton.setFocusable(false);
rowView.setTag(viewHolder);
}
//填充数据
ViewHolder=(ViewHolder)rowView.getTag();
字符串s=名称[位置];
字符串abs=Integer.toString(位置+1);
holder.myButton.setText(s+“数字”+abs);
holder.image.setImageResource(R.drawable.R_arr);
返回行视图;
}
}
您只需配置onClick方法,如下所示:
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//your code goes here
}
});
您只需配置onClick方法,如下所示:
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//your code goes here
}
});
请在按钮上写onclicklistener。请在按钮上写onclicklistener。在getView中放置按钮单击listener
@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项目和按钮都可单击,请执行此操作
使ListView可聚焦android:focusable=“true”
自定义listview项中的按钮不可聚焦android:focusable=“false”在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项目和按钮都可单击,请执行此操作
使ListView可聚焦android:focusable=“true”
自定义listview项中的按钮不可聚焦android:focusable=“false”方法1:
首先替换xml中的按钮代码,如下所示
然后转到您的活动并编写如下代码
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
}
});
方法1:
首先替换xml中的按钮代码,如下所示
然后转到您的活动并编写如下代码
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
}
});
对于listview中的同一行项目,不建议使用两个单击侦听器
对于listview中的同一行项目,不建议使用两个单击侦听器
初始化适配器的getview方法内的按钮。您只处理对行的单击。这就是你想要的吗?你的按钮没有android:onClick或onClick Listener。因此,当您单击它时,不会发生任何事情。适配器的getview方法内的initialize按钮。您只处理对行的单击。这就是你想要的吗?你的按钮没有android:onClick或onClick Listener。因此,单击它时不会发生任何事情。