Articles of listadapter

Android ListView中包含可点击项目的行会导致问题继续滚动

我一直在网上搜索寻找几个小时的答案,但我似乎无法find任何能够解决这个问题的人。 我有一个使用自定义适配器的listview。 一行看起来像这样 该列表由数组填充。 一切都很好。 现在,我希望ImageView和ToggleButton对点击做出反应,所以我在我的适配器中实现了OnClickListener,将项目放在每个视图的标签中,然后我将它们的onclicklistener设置为此。 效果很好,除了现在我不能使用onListItemClick来启动项目的活动! 好吧,我说,我只是让在中间保持文本的relativelayout使用相同的onclicklistener。 效果很好。 一切都是可点击的,生活是美好的。 除! 现在,当我滚动列表时,我无法通过再次投掷来“继续”滚动。 这导致滚动停止,我不得不再次投掷以使其再次运行。 似乎onclick-thingy导致fling-motion被解释为tap或某事(它不会触发onClick中的逻辑)。 我知道这可以通过我的HTC Hero上的电话列表来实现,它具有我想要的应用程序中的布局和行为。 这个应用程序甚至似乎有onItemClickListener工作。 那么如何确保列表保持滚动,仍然可以单击togglebutton,listitem和imageview? 我整天都被困在这一天,这让我很头疼:(

带Checkbox的Android ListView:自动取消选中

我有一个带有自定义BaseAdapter的ListView。 列表项包含需要表示数据库中的属性的CheckBox。 我使用CheckBox.setOnCheckedChangeListener和一个新的OnCheckedChangeListener来检测更改,因此我可以根据CheckBox的当前状态更改数据库。 到目前为止非常简单的东西。 但是,当在列表中向下滚动时,先前检查的CheckBoxes将被取消选中。 我怀疑只要视图被回收就会发生这种情况(我正在使用convertView / ViewHolder技术)。 我怎么能阻止这个? 出了什么问题? 提前致谢。 编辑:为了使事情更清楚,问题是回收视图以某种方式使用isChecked == false调用OnCheckedChangeListener#onCheckedChanged(buttonView,isChecked)。

Android处理ListView中的许多EditText字段

只是一个基本问题:如果我有几十个属于ListAdapter的EditText字段,那么各个EditText字段如何知道它们属于哪一行? 目前我正在使用TextWatcher来监听文本输入。 我试过扩展TextWatcher,以便我可以将EditText的位置传递给TextWatcher的构造函数。 但是,当popup软键盘时,与各种EditText字段对应的位置会随机播放。 如何跟踪EditText字段到正确的位置? 我正在使用GridView来解决问题。 每个项目的布局都是一个ImageView,下面有TextView和EditText字段。 每个EditText的文本都保存在一个名为strings的全局String数组中。 它最初是空的,并由我的TextWatcher类更新。 public void initList() { ArrayAdapter listAdapter = new ArrayAdapter(this, R.layout.shape, strings) { @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.shape, null); } final String theData = getItem(position); final EditText editText = (EditText) convertView.findViewById(R.id.shape_edittext); editText.setText(theData); editText.addTextChangedListener( […]

自定义适配器getView中的NullPointerException

我正在为ListView编写一个自定义适配器,它有一个自定义列表。 显然,我必须编写getView函数。 所以这是我的代码: /*1*/ public View getView(int position, View convertView, ViewGroup parent) { /*2*/ View vi = convertView; /*3*/ if (convertView == null) /*4*/ vi = inflater.inflate(R.layout.result_list_item, null); /*5*/ /*6*/ TextView title = (TextView) vi.findViewById(R.id.tvTitle); /*7*/ TextView subtitle = (TextView) vi.findViewById(R.id.tvSubTitle); /*8*/ ImageView image = (ImageView) vi.findViewById(R.id.imageView1); /*9*/ /*10*/ title.setText(data.get(position).getDescription().toString()); /*11*/ subtitle.setText(data.get(position).getDate().toString()); /*12*/ String img […]

Android:SectionIndexer的自定义视图布局,并动态禁用SectionIndexer

是否可以将自定义视图用作节索引器? 即使它更透明,使用图像而不是字符? 是否可以在不禁用FastScrollfunction的情况下按需启用/禁用SectionIndexerpopup窗口?

滚动到/设置自定义列表首选项的位置

我有一个自定义的preferencefragment包含两个自定义列表首选项。 由于两个列表的动态特性,每次加载我的父片段时,我都会通过创建自定义preferencefragment的新实例来刷新这两个片段: if(themeListFragment != null) { themeListFragment = new ThemeListFragment(); //init fragment getFragmentManager().beginTransaction() .replace(R.id.themeFragmentCont, themeListFragment) .commit(); } 这完美地工作并呈现自定义列表首选项。 这两个列表首选项中的每一个都由自定义列表首选项定义: //setup themes list if(lp == null) { lp = (ThemeListPreference) findPreference(“theme_list”); lp.setOnPreferenceChangeListener(this); refreshThemes(); } 我的自定义列表首选项主要是在创建对话框之前执行某些操作,因此它会覆盖该方法: @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { int index = preferences.getInt(getContext().getString(R.string.theme_id),getContext().getResources().getInteger(R.integer.default_theme_id)); System.out.println(index); ListAdapter listAdapter = new ThemeListAdapter(getContext(), R.layout.image_list_row, this.getEntries(), themes, index, this); […]

ListView中的ViewPager和OnItemClickListener

我正在创建一个轻扫到列表视图适配器。 我的基本方法是将列表项的视图包装为ViewPager中的第二个视图,并在ViewPager的项更改侦听器中提供必要的回调。 通过很多痛苦我已经使View回收器按预期工作,以及实现了ViewHolder和ViewBinder模式。 我甚至设法阻止ListView在ViewPager滚动时接管触摸事件,而不必创建ListView的自定义子类(我可以从适配器完成所有操作)。 我遇到麻烦的地方是让选择器和OnItemClickListener工作。 在查看ListView的源代码之后,似乎通过重写ViewPager的hasFocusable()方法总是返回false(稍后我将从子视图中提取此值)这些内容应该已经重新启用。 不幸的是,这种情况并非如此。 我已经尝试了setDecendantFocusability()解决方法,但我仍然卡住了。 我想避免在可能的情况下扩展ListView以提供最大程度的模块化。 出于类似的原因,我不想将选择器添加到ViewPager的背景中(如果dev更改了ListView的选择器,则不会反映这一点)。 本质上,我希望在ListView和子视图之间使ViewPager代码透明。 有任何想法吗?

在onCreate之前,活动无法使用系统服务?

我无法弄清楚如何解决此错误。 我对Android和Java非常环保,因此代码将非常有用以及解释。 有任何想法吗? 谢谢。 LogCat: FATAL EXCEPTION: main ERROR/AndroidRuntime(13527): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.xxx.xxx.AC.List_AC}: java.lang.IllegalStateException: System services not available to Activities before onCreate() ERROR/AndroidRuntime(13527): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) ERROR/AndroidRuntime(13527): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) ERROR/AndroidRuntime(13527): at android.app.ActivityThread.access$2300(ActivityThread.java:125) ERROR/AndroidRuntime(13527): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) ERROR/AndroidRuntime(13527): at android.os.Handler.dispatchMessage(Handler.java:99) ERROR/AndroidRuntime(13527): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(13527): at android.app.ActivityThread.main(ActivityThread.java:4627) ERROR/AndroidRuntime(13527): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(13527): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(13527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) […]

如何在运行时向ListView项添加动态视图?

我的问题是,我不知道是否应该使用多个列表视图或可以动态增长的自定义列表视图项适配器。 例如,对于特定用户,他们可以有多个活动: – 拍照 – 说些什么 – 入住 – …… 显然,这个列表可以随着用户完成更多活动而增长。 大多数情况下,我经常创建一个自定义项适配器,它从BaseAdapter扩展并使用ItemHolder模式,如下所示: public class PlaceItemAdapter extends BaseAdapter { private Activity context; private List places; private boolean notifyChanged = false; public PlaceItemAdapter(Activity context, List places) { super(); this.context = context; this.places = places; } public int getCount() { return places.size(); } public Object getItem(int position) { […]

在Android上的ListView中突出显示所选项目

我一直在制作一个与Android中的ListViews一起使用的应用程序,但我不能这样做以使所选(chacked)项具有不同的背景。 我正在使用CHOICE_MODE_SINGLE。 这是我的代码到目前为止的样子: 我使用的ListView: (在layout.xml内 ) 我在适配器中使用的TextView布局: ( listItem.xml ) 这是我添加适配器的地方: mListAdapter = new ArrayAdapter(this, R.layout.listItem, mList); mListView = (ListView) findViewById(R.id.listView); mListView.setAdapter(mAuthorAdapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { String selected = mList.get(position); // … mListView.setItemChecked(position, true); } }); 我确定在点击时检查了正确的项目,因为当我调用getCheckedItemPosition()时,它返回正确的值。 现在,我尝试了两件事来突出显示选中的项目: 选择器drawable: ( selector_test.xml ) 我将它添加到.xml中: android:listSelector=”@drawable/selector_test” […]