- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的带有 ListActivity 的应用程序中,覆盖的 onListItemClick
回调不会通过单击 ListView
项目触发。
我已经使用以下 xml 文件 permissionview.xml 定义了一个自定义 ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_Apply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_apply"
android:onClick="onApplyClick" />
<Button
android:id="@+id/btn_install"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_install"
android:onClick="onInstallClick" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel" />
</LinearLayout>
<ListView android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false">
</ListView>
</LinearLayout>
和 View 项布局 checkable.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView android:id="@+id/img" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
android:src="@drawable/ic_launcher" android:focusable="false" />
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="4px"
android:layout_marginRight="10px"
android:clickable="true">
</CheckBox>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/img"
android:gravity="bottom"
android:text="@+id/label"
android:textSize="15px"/>
</RelativeLayout>
定义的ArrayAdapter
定义如下:
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
private final List<Model> list;
private final Activity context;
private boolean changeable;
public InteractiveArrayAdapter(Activity context, List<Model> list, boolean changeable) {
super(context, R.layout.checkable, list);
this.context = context;
this.list = list;
this.changeable = changeable;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox;
protected ImageView image;
protected int pos;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflater = context.getLayoutInflater();
view = inflater.inflate(R.layout.checkable, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.image = (ImageView) view.findViewById(R.id.img);
viewHolder.pos = position;
view.setClickable(true);
if (!changeable)viewHolder.checkbox.setEnabled(false);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkbox.getTag();
element.setActive(buttonView.isChecked());
}
}
);
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).showPermission());
holder.checkbox.setChecked(list.get(position).isActive());
if (list.get(position).isRedundant()) {
holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.warning));
} else {
holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.ok));
}
return view;
}
}
在扩展 ListActivity 的类中定义的 ArrayAdapter 在 asyncTask 中填充一个 arrayList(列表信息在 doInBackground()
方法中计算):
public class PermissionViewActivity extends ListActivity {
private final static String TAG = "PMA";
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.permissionview);
...
}
...
private class CurrentPermissions extends AsyncTask<String, Integer, String> {
private ListActivity la;
private Context context;
private int progress = 0;
public CurrentPermissions(ListActivity la) {
this.la = la;
this.context = la;
}
protected void onPreExecute() {
...
protected void onPostExecute(String result) {
adapter = new InteractiveArrayAdapter(la, permissionList, changeable);
la.setListAdapter(adapter);
/output with number of listitems
System.out.println("DEBUG1 " + la.getListAdapter().getCount());
}
}
...
@Override
protected void onListItemClick(ListView l, View view, int position, long id) {
super.onListItemClick(l, view, position, id);
System.out.println("clicked !");
}
...
}
onListItemClick
方法没有被执行。在 ArrayAdapter 中定义 onClickListener 时,点击事件有效:
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("Klick D1 " + list.get(viewHolder.pos));
}
});
为什么在 ArrayAdapter 中点击事件的定义有效,但在 ListActivity 中覆盖却不行?我找不到故障。
最佳答案
尝试将行布局中的 CheckBox
设置为不可可聚焦
:
//...
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="4px"
android:layout_marginRight="10px"
android:focusable="false"
android:clickable="true">
//...
关于android - ListActivity 的 onListItemClick 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709669/
在 Android 应用程序中,“ListActivity”可以作为主要 Activity 吗? 最佳答案 是的,您可以使用 ListActivity 作为您应用的主要 Activity 。只需将其定
我正在尝试创建一个 ListActivity,其行包含文本和图像。但它只显示一行的值,其他行的图像和文本是不可见的。当我调试代码时,它们的值不为空。但它显示行,但除了第一行之外,在布局上不显示这些文本
我有一个基本的 ListActivity 和一些假测试数据。当我运行该应用程序时,它立即崩溃。我尝试调试但没有得到任何反馈。它在说开始后就停止了: Intent 。 public class Pers
如何制作一个包含图片和摘要(项目列表文本下的文本)的列表,它对项目的描述很少。 我的代码制作了一个包含图片的列表。如何添加摘要? Activity 类别: public clas
当我尝试设置 listAdapter 或适配器(#setListAdapter(), #getListView().setAdapter())时,它不显示。当我尝试单独设置 ListView 时,它工
我需要在同一 Activity 中插入来自两个列表(从游标填充)的数据。 布局必须是: -TextView1-从 table1 游标列表 -TextView2-从 table2 游标列表 这可能吗?
鉴于我下面的 xml 文件,当我的对象列表不为空时,我想显示 ListView,当我的列表为空时,我想显示 ViewStub。我可以让它工作,但每当我改变屏幕方向时,我都会丢失我添加到列表中的新数据。
我的 Android 应用程序中有一个运行良好的 ListActivity。直到我决定使用加速度计添加滚动功能。 这是我的代码: package be.pxl.minecraftguide; impo
我有以下 ListActivity: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc
有人知道使用 CursorAdapter 的简单示例吗?这是我现在正在做的事情,它因 RuntimeException 而崩溃。鉴于我是新手并且找不到使用 Cursor 的 ListView 的任何简
我正在使用 ListActivity 来显示图标化列表(使用 BaseAdapter 的自定义实现)。它没有正确地重新加载数据。当我更改适配器的内容并通知列表时,似乎旧数据绘制在新数据之上,直到发生滚
我在使用带有自定义适配器的 ListActivity 时遇到了问题。这是适配器代码: public class CustomRowAdapter extends BaseAdapter { p
所以,我在这里有我的 onCreate 方法,用于使用用户安装的应用程序填充 ListView。这需要很长时间才能完成,我试图弄清楚在哪里创建一个新线程来完成一些繁重的工作,以便我可以在加载列表时显示
我可以在从外部 XML 资源加载内容后更新 ListActivity 吗:/? SUB() 是 ListActivity Main() -> opening: SUB() -> updating fr
我正在构建一个小型应用程序,我想在新数据到达时自动更新它。 根据我阅读的 android 文档,我认为因为我使用的是较新的技术,所以会在后台为我创建一个 ContentObserver,并且我会自动调
我有一个显示玩家信息的 Activity 。这部分工作正常。 (我使用了适配器)。但是,我应该将检测某行何时被单击的代码放在哪里? PlayersActivity.java package com.d
是否可以将 ListActivity 的页眉和页脚设置为固定在顶部和底部,这样只有内容(列表)在滚动,而不是页眉和页脚? 我都是这样设置的: View header = getLayoutInflat
我正在使用兼容性库将现有应用程序转换为 Fragments API。我读到您应该更新扩展 Activity 的类以现在使用 FragmentActivity。这对大多数情况都很好,但是扩展 ListA
我有一个 super 简单的 ActivityList,比如一个包含所有国家/地区的 scoll 列表。现在,我想按大陆对国家进行分组: 阿兹亚 中国 印度 欧洲 法国 希腊 Android 联系人应
我有一个实现 Runnable 的列表 Activity ,因此我的数据获取是通过进度条完成的。数据是从网络服务中提取的。现在,我要获取所有用户,但我想对其进行更改,以便它一次检索用户一页,而不是一次
我是一名优秀的程序员,十分优秀!