我有一个更新视图,我需要为Spinner预先选择存储在数据库中的值.
我记得这样的事情,但Adapter没有indexOf办法,所以我被困住了.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Run Code Online (Sandbox Code Playgroud) 我想做什么:运行后台线程计算ListView内容并部分更新ListView,同时计算结果.
我知道我必须避免:我不能从后台线程中弄乱ListAdapter内容,所以我继承了AsyncTask并从onProgressUpdate发布结果(向适配器添加条目).我的适配器使用结果对象的ArrayList,这些arraylists上的所有操作都是同步的.
其他人的研究:有非常有价值的数据在这里.对于500名用户来说,我几乎每天都会遇到崩溃,当我list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)在onProgressUpdate中添加了阻塞时,崩溃率下降了10倍但没有消失.(有人建议回答)
我有时得到的:请注意,它很少发生(每周一次为3.5k用户之一).但我想完全摆脱这个错误.这是部分堆栈跟踪:
`java.lang.IllegalStateException:` The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296334, class android.widget.ListView) with Adapter(class com.transportoid.Tracks.TrackListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1432)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2062)
at android.widget.ListView.onTouchEvent(ListView.java:3234)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
[...]
Run Code Online (Sandbox Code Playgroud)
救命?不再需要了,见下文
最终答案:事实证明,我notifyDataSetChanged每次调用5次以避免闪烁和突然更改列表.它不能这样做,总是在基本列表更改时通知适配器.这个错误现在已经消失了.
我正在尝试为ListView创建自定义适配器,因为列表中的每个项目都可以有不同的视图(链接,切换或无线电组),但是当我尝试运行使用ListView的Activity时,我收到错误,该应用程序停止.该应用程序针对Android 1.6平台.
代码:
public class MenuListAdapter extends BaseAdapter {
private static final String LOG_KEY = MenuListAdapter.class.getSimpleName();
protected List<MenuItem> list;
protected Context ctx;
protected LayoutInflater inflater;
public MenuListAdapter(Context context, List<MenuItem> objects) {
this.list = objects;
this.ctx = context;
this.inflater = (LayoutInflater)this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(LOG_KEY, "Position: " + position + "; convertView = " + convertView + "; parent=" + parent);
MenuItem item = list.get(position);
Log.i(LOG_KEY, "Item=" + item );
if (convertView == …Run Code Online (Sandbox Code Playgroud) 有没有人在现实世界的应用程序中使用Bridge Pattern?如果是这样,你是如何使用它的?是我,还是仅仅是适配器模式,在混合中引入了一点依赖注入?它真的值得拥有自己的模式吗?
Facade,Proxy,Adapter和Decorator设计模式有什么区别?
我从来没有读过明确的解释,你的是什么?
我想知道在 Android环境中何时,何地以及如何使用适配器.
来自Android开发者文档的信息对我来说不够,我想得到更详细的分析.
在用户界面中,必须有一个微调器,其中包含一些名称(名称可见),每个名称都有自己的ID(ID不等于显示顺序).当用户从列表中选择名称时,必须更改变量currentID.
该应用程序包含ArrayList
User是具有ID和名称的对象:
public class User{
public int ID;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
我不知道的是如何创建一个显示用户名列表并将微调器项绑定到ID的微调器,这样当选择/更改微调器项时,变量currentID被设置为适当的值.
如果有人能够展示所述问题的解决方案或提供解决问题的任何链接,我将不胜感激.
谢谢!
是否可以调用Activityfrom中定义的方法ListAdapter?
(我想打一个Button在list's行单击此按钮时,它应该执行的方法,即在相应的活动定义.我试图设置onClickListener在我ListAdapter,但我不知道该怎么称呼这种方法,什么是它的路径. ..)
当我使用时,Activity.this.method()我收到以下错误:
No enclosing instance of the type Activity is accessible in scope
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?