比较来自世界各地的卖家的域名和 IT 服务价格

ListView setOnItemClickListener 添加按钮时不起作用

我有一个列表视图,每行上有文本和按钮,列表视图 setOnItemClickListener// 不起作用。 是否有可能处理项目按下,然后单击不同的按钮/物品点击您需要调用 ActivityA 然后单击“只需调用”点击 ActivityB/. 有人有一个解决方案


private ArrayList<string> userIDArr = null;
private ArrayList<string> userNameArr = null;
private DatabaseHelper dbHelper = null;
private ListView userListView=null;


public void onCreate/Bundle savedInstanceState/
{
super.onCreate/savedInstanceState/;
setContentView/R.layout.list_view/;
dbHelper = new DatabaseHelper/this.getApplicationContext///;
Map<string,arraylist<string>&gt; displayMap = dbHelper.getUserListToDisplay//;
userIDArr = displayMap.get/"UserID"/;
userNameArr = displayMap.get/"FirstName1"/;


userListView = /ListView/ findViewById/R.id.listView2/;
userListView.setAdapter/new UserListAdapter/this,userIDArr//;


userListView.setOnItemClickListener/new AdapterView.OnItemClickListener// {
@Override
public void onItemClick/AdapterView<? > arg0, View arg1, int position, long arg3/ {

Toast.makeText/usersListActivity.this,
"Item in position " + position + " clicked", Toast.LENGTH_LONG/.show//;
}
}/;
}


public class UserListAdapter extends ArrayAdapter<string>
{
Activity context;
public UserListAdapter/Activity context, ArrayList<string> names/ {
super/context, R.layout.list_item, names/;
this.context = context;
}
private class ViewHolder {
public TextView UserNameAndID;
public TextView Description;
public Button UploadBtn;
}

@Override
public View getView/int position, View convertView, ViewGroup parent/ {
ViewHolder holder;
View rowView = convertView;
if /rowView == null/ {
LayoutInflater inflater = context.getLayoutInflater//;
rowView = inflater.inflate/R.layout.list_item, null, true/;
holder = new ViewHolder//;
holder.UserNameAndID = /TextView/ rowView.findViewById/R.id.User_detailsTxt/;
holder.Description = /TextView/ rowView.findViewById/R.id.User_status/;
holder.UploadBtn = /Button/ rowView.findViewById/R.id.uploadbutton/;
holder.UploadBtn.setOnClickListener/new View.OnClickListener// {

public void onClick/View v/ {
Toast.makeText/usersListActivity.this," Button clicked",Toast.LENGTH_SHORT/.show//;
}
}/;
rowView.setTag/holder/;
} else {
holder = /ViewHolder/ rowView.getTag//;
}
String s = userNameArr.get/position/+","+userIDArr.get/position/;
holder.UserNameAndID.setText/s/;
holder.Description.setText/"U r in middle"/;
return rowView;
}
}
}`


</string></string></string,arraylist<string></string></string>
已邀请:

莫问

赞同来自:

尝试自定义按钮。 /或者您想要处理的任何其他表示点击列表项/ 通过以下方式:


android:focusable="false"
android:focusableInTouchMode="false"

石油百科

赞同来自:

有时,列表仍然无法强制侦听器单击。 在这种情况下,您可能必须添加另一个属性。


android:descendantFocusability="blocksDescendants"


此属性必须添加到最顶层布局 XML, 你在哪里提供元素 ListView.

郭文康

赞同来自:

如果您有活动视图/在您的列表中的聚焦视图,它将关闭
onItemClickListener

... 您可以尝试通过添加:
android:focusable="false"

对于任何类型,通常侧重于。

涵秋

赞同来自:

面团是要添加的
Listener

对所有人来说
rowView

, 所以K.
Button

里面
Adapter

.
类似的东西。


public class MyAdapter extends BaseAdapter implements View.OnClickListener{

@Override
public View getView/int position, View convertView, ViewGroup parent/
{
View rowView = convertView;
if/rowView == null/
{
//intialize rowView, and set onclick listener only once.
rowView = someIntilizationMehhodOrInflatorMethod//;
//add listener to the button also and also to the row view
rowView.setOnClickListener/this/;
}
//all your inflation and setting values goes here and at the end,
//set position as tag to get the correct position, rather buggy one.
rowView.setTag/String.valueOf/position//;


return rowView;
}
public void onClick/View v/
{
//now get the tag of View v and convert it to integer.
int pos = Integer.parseInt/v.getTag//.toString///;
Toast.makeText/context,"Item in position " + pos + " clicked",Toast.LENGTH_LONG/.show//;
}
}

詹大官人

赞同来自:

尝试设置
setClickable/false/

对于每一个人
Button

,
ImageButton

等等
View

通过以下方式:


view.setClickable/false/;
button.setClickable/false/;
imagebutton.setClickable/false/;


此外,您必须添加


android:descendantFocusability="blocksDescendants"


到主要的一个 /第一级/ 市场

小姐请别说爱

赞同来自:

添加
ImageView

并授予倾听者
setOnItemClcik

, 这将罚款。


public View getView/final int position, View convertView, ViewGroup parent/ {
MyViewHolder mViewHolder;
if/convertView == null/ {
convertView = inflater.inflate/R.layout.youtubesearchrow, null/;
mViewHolder = new MyViewHolder//;
mViewHolder.alarm = /ImageView/convertView.findViewById/R.id.alarm/;
convertView.setTag/mViewHolder/;
} else {
mViewHolder = /MyViewHolder/ convertView.getTag//;
}

mViewHolder.tvTitle = detail/convertView, R.id.tvTitle,
// mViewHolder.tvDesc = detail/convertView, R.id.tvDesc,
mViewHolder.ivIcon = detail_image/convertView, R.id.ivIcon,

mViewHolder.alarm.setOnClickListener/new OnClickListener// {

@Override
public void onClick/View v/ {
// TODO Auto-generated method stub
}
}/;

return convertView;
}

奔跑吧少年

赞同来自:

我也得到了同样的错误。 如果列表布局上有任何按钮,请将其替换为
TextView

, IE
ImageButton


ImageView

. 供参考,我的代码是:


private Activity activity;
private LayoutInflater inflater;

private List<itemlist> itemListsItems;

private Bookmark_SharedPref pref;

ImageLoader imageLoader = AppController.getInstance//.getImageLoader//;

public CustomListAdapter_Item/Activity activity,List<itemlist> itemListsItems/{
this.activity=activity;
this.itemListsItems=itemListsItems;
pref = new Bookmark_SharedPref/activity/;
}


@Override
public int getCount// {
return itemListsItems.size//;
}

@Override
public Object getItem/int position/ {
return itemListsItems.get/position/;
}

@Override
public long getItemId/int position/ {
return position;
}

@Override
public View getView/final int position, View convertView, ViewGroup parent/ {

View v = convertView;
ViewHolder holder;

if/inflater == null/{
inflater = /LayoutInflater/activity.getSystemService/Context.LAYOUT_INFLATER_SERVICE/;
}
if/convertView == null/{
convertView = inflater.inflate/R.layout.item_layout,null/;

holder = new ViewHolder//;
convertView.setTag/holder/;
}
else{
holder = /ViewHolder/convertView.getTag//;
}


if/imageLoader == null/{
imageLoader = AppController.getInstance//.getImageLoader//;
}




holder.img = /NetworkImageView/convertView.findViewById/R.id.item_image/;
holder.Title = /TextView/convertView.findViewById/R.id.item_title/;
holder.Cat = /TextView/convertView.findViewById/R.id.item_category/;

holder.id = /TextView/convertView.findViewById/R.id.itemid/;

holder.Desc = /TextView/convertView.findViewById/R.id.item_description/;

holder.book = /ImageView/convertView.findViewById/R.id.bookmark_star/;



// getting blog data or the row
ItemList il = itemListsItems.get/position/;

//setting image
holder.img.setImageUrl/il.getImageUrl//, imageLoader/;

// setting title
holder.Title.setText/il.getTitle///;

//setting category
holder.Cat.setText/il.getCategory///;


//setting blog id
holder.id.setText/il.getId///;

//setting description
holder.Desc.setText/il.getDescription///;

//bookmarking the post
holder.book.setOnClickListener/new View.OnClickListener// {
@Override
public void onClick/View v/ {

itemListsItems.get/position/.isFav = !itemListsItems.get/position/.isFav;
//ImageView/v.findViewById/R.id.bookmark_star//.setImageResource/itemListsItems.get/position/.isFav ? R.mipmap.active_star : R.mipmap.inactive_star/;

if/itemListsItems.get/position/.isFav/{
String data = Integer.toString/itemListsItems.get/position/.id/;
Toast.makeText/v.getContext//,"fav hai "+data,Toast.LENGTH_SHORT/.show//;
pref.addPref/data/;
} else {
String data = Integer.toString/itemListsItems.get/position/.id/;
Toast.makeText/v.getContext//,"not fav"+ data,Toast.LENGTH_SHORT/.show//;
pref.removePref/data/;
}
//notifyDataSetChanged//;
}
}/;

//ImageView/convertView.findViewById/R.id.bookmark_star//.setImageResource/itemListsItems.get/position/.isFav ? R.mipmap.active_star : R.mipmap.inactive_star/;

/*
if/itemListsItems.get/position/.isFav/{
String data = Integer.toString/itemListsItems.get/position/.id/;
Toast.makeText/convertView.getContext//,"fav hai "+data,Toast.LENGTH_SHORT/.show//;
pref.addPref/data/;
} else {
String data = Integer.toString/itemListsItems.get/position/.id/;
//Toast.makeText/convertView.getContext//,"not fav"+ data,Toast.LENGTH_SHORT/.show//;
pref.removePref/data/;
}
*/
return convertView;
}

private static class ViewHolder {
public TextView Title, Desc,Cat,id;
ImageView book;
NetworkImageView img;
}


还要记住,使列表布局成为
android:focussable="true"

以及此按钮参数/文本使用
android:focussable="false"

.
</itemlist></itemlist>

八刀丁二

赞同来自:

添加属性
android:focusable="false"

在按钮和父演示文稿中,添加属性
android:descendantFocusability="blocksDescendants"

通过以下方式。


<relativelayout android:descendantfocusability="blocksDescendants" android:layout_height="wrap_content" android:layout_width="match_parent">
<imagebutton android:focusable="false" android:id="@+id/sell_button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_sell"></imagebutton>
</relativelayout>

郭文康

赞同来自:

我绝对不知道为什么,但有时,当您安装适配器时,可以清理侦听器。 然后你要打电话
setOnClickListener


setAdapter

或者
setListAdapter

.

卫东

赞同来自:

去掉
android:clickable="true"

来自内部代表性 custome 的
ListView

.

二哥

赞同来自:

使父冻结属性相等 false, 像这样
android:clickable="false"

.


<linearlayout android:clickable="false" android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="[url=http://schemas.android.com/apk/res/android">]http://schemas.android.com/apk ... gt%3B[/url]


再次面对问题,然后添加所有子公司的可点击谎言。
</linearlayout>

董宝中

赞同来自:

注意到如何令人惊讶的是 XML 改变了,导致事实 setonitemclicked 在 java 为我工作..


android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"

要回复问题请先登录注册