单击事件不适用于列表视图项目中的按钮
Click event not working on button in listview item
我正在使用自定义 Listview
,其中 Custom views
作为列表元素,每个列表项都是一个单独的 Custom view
。我面临的问题是,当我们点击它时,ListView 第一项按钮上的点击事件没有被触发。单击它后,如果我们单击屏幕中的其他位置,则会触发单击事件。我无法找到它的解决方案,我正在努力解决它。任何帮助将不胜感激。
已更新代码:这是 getview 方法
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (position == 0)
{
convertView = this.context.LayoutInflater.Inflate(Resource.Layout.home_hero_container, null);
this.heroSection = convertView.FindViewById<FrameLayout>(Resource.Id.heroContainer);
this.setHeroCard();
}
else
{
convertView = (View)GetItem(position - 1);
}
return convertView;
}
GetItem
returns 自定义视图。第一项将是英雄布局,之后所有 Customviews
将添加到 Convertview
。点击事件不适用于 hero 之后的第一项。
更新我的回答:
我没有将 Customview
直接分配给 Convertview
,而是膨胀了 FrameLayout
并将 Customview
添加到 FrameLayout
。现在我没有点击问题了。
您可以尝试在您的自定义适配器中设置 onClick 事件,如果您有时间,请查看本教程以供参考 - http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html
尝试一下它会起作用
public class ContactsAdapter extends BaseAdapter {
ArrayList<ContactInfo> mlist;
Context mcontext;
public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {
mlist = mchtlist;
mcontext = context;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int postion) {
return mlist.get(postion);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewgroup){
View view = null;
if(convertview == null){
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.contactrow, null);
ContactHolder holder = new ContactHolder();
holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
holder.chkselected = (CheckBox)view.findViewById(R.id.check);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// to open the selected file in resp
// do your work here
}});
chkselected .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(context,// "checked is clicke="+pos, 12).show();
if (chkselected.isChecked())
{
// do your work here
} else {
// do your work here
}
}
});
view.setTag(holder);
}
else{
view = convertview;
}
ContactHolder holder2 = (ContactHolder) view.getTag();
holder2.txtviewfirstname.setText(list.get(position).firstname);
holder2.txtviewphone.setText(list.get(position).phonenumber);
holder2.chkselected.setChecked(list.get(position).selected);
return view;
}
}
public class ContactsAdapter extends BaseAdapter {
ArrayList<ContactInfo> mlist;
Context mcontext;
public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {
mlist = mchtlist;
mcontext = context;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int postion) {
return mlist.get(postion);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewgroup){
View view = null;
if(convertview == null){
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.contactrow, null);
ContactHolder holder = new ContactHolder();
holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
holder.chkselected = (CheckBox)view.findViewById(R.id.check);
holder.chkselected.setOnCheckChangeListener(new CheckchangeListener() );
view.setTag(holder);
}
else{
view = convertview;
}
ContactHolder holder2 = (ContactHolder) view.getTag();
holder2.txtviewfirstname.setText(list.get(position).firstname);
holder2.txtviewphone.setText(list.get(position).phonenumber);
holder2.chkselected.setChecked(list.get(position).selected);
return view;
}
class CheckchangeListener implements OnCheckedChangeListener {
public CheckchangeListener() {
// TODO Auto-generated constructor stub
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
// do your work here
} else {
// do your work here
}
}
}
}
我正在使用自定义 Listview
,其中 Custom views
作为列表元素,每个列表项都是一个单独的 Custom view
。我面临的问题是,当我们点击它时,ListView 第一项按钮上的点击事件没有被触发。单击它后,如果我们单击屏幕中的其他位置,则会触发单击事件。我无法找到它的解决方案,我正在努力解决它。任何帮助将不胜感激。
已更新代码:这是 getview 方法
public override View GetView(int position, View convertView, ViewGroup parent)
{
if (position == 0)
{
convertView = this.context.LayoutInflater.Inflate(Resource.Layout.home_hero_container, null);
this.heroSection = convertView.FindViewById<FrameLayout>(Resource.Id.heroContainer);
this.setHeroCard();
}
else
{
convertView = (View)GetItem(position - 1);
}
return convertView;
}
GetItem
returns 自定义视图。第一项将是英雄布局,之后所有 Customviews
将添加到 Convertview
。点击事件不适用于 hero 之后的第一项。
更新我的回答:
我没有将 Customview
直接分配给 Convertview
,而是膨胀了 FrameLayout
并将 Customview
添加到 FrameLayout
。现在我没有点击问题了。
您可以尝试在您的自定义适配器中设置 onClick 事件,如果您有时间,请查看本教程以供参考 - http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html
尝试一下它会起作用
public class ContactsAdapter extends BaseAdapter {
ArrayList<ContactInfo> mlist;
Context mcontext;
public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {
mlist = mchtlist;
mcontext = context;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int postion) {
return mlist.get(postion);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewgroup){
View view = null;
if(convertview == null){
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.contactrow, null);
ContactHolder holder = new ContactHolder();
holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
holder.chkselected = (CheckBox)view.findViewById(R.id.check);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// to open the selected file in resp
// do your work here
}});
chkselected .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(context,// "checked is clicke="+pos, 12).show();
if (chkselected.isChecked())
{
// do your work here
} else {
// do your work here
}
}
});
view.setTag(holder);
}
else{
view = convertview;
}
ContactHolder holder2 = (ContactHolder) view.getTag();
holder2.txtviewfirstname.setText(list.get(position).firstname);
holder2.txtviewphone.setText(list.get(position).phonenumber);
holder2.chkselected.setChecked(list.get(position).selected);
return view;
}
}
public class ContactsAdapter extends BaseAdapter {
ArrayList<ContactInfo> mlist;
Context mcontext;
public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {
mlist = mchtlist;
mcontext = context;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int postion) {
return mlist.get(postion);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewgroup){
View view = null;
if(convertview == null){
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.contactrow, null);
ContactHolder holder = new ContactHolder();
holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
holder.chkselected = (CheckBox)view.findViewById(R.id.check);
holder.chkselected.setOnCheckChangeListener(new CheckchangeListener() );
view.setTag(holder);
}
else{
view = convertview;
}
ContactHolder holder2 = (ContactHolder) view.getTag();
holder2.txtviewfirstname.setText(list.get(position).firstname);
holder2.txtviewphone.setText(list.get(position).phonenumber);
holder2.chkselected.setChecked(list.get(position).selected);
return view;
}
class CheckchangeListener implements OnCheckedChangeListener {
public CheckchangeListener() {
// TODO Auto-generated constructor stub
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
// do your work here
} else {
// do your work here
}
}
}
}