我遇到了一些我从一本书改编的BaseAdapter代码的问题.我一直在我的应用程序中使用此代码的变体,但只是在滚动一个长列表时才实现ListView中的项目变得混乱而不是所有元素都显示出来.
描述确切的行为非常困难,但很容易看出你是否采用了50个项目的排序列表并开始上下滚动.
class ContactAdapter extends BaseAdapter {
ArrayList<Contact> mContacts;
public ContactAdapter(ArrayList<Contact> contacts) {
mContacts = contacts;
}
@Override
public int getCount() {
return mContacts.size();
}
@Override
public Object getItem(int position) {
return mContacts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
LayoutInflater li = getLayoutInflater();
view = li.inflate(R.layout.groups_item, null);
TextView label = (TextView)view.findViewById(R.id.groups_item_title);
label.setText(mContacts.get(position).getName());
label = (TextView)view.findViewById(R.id.groups_item_subtitle);
label.setText(mContacts.get(position).getNumber());
}
else
{
view = …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题让我发疯.在我的Android应用程序中,我定制了自己的适配器,它从ArrayAdapter扩展而来.我添加了适配器的ListView项可以标记为文本(不可编辑),可编辑文本或微调器.疯狂的东西是:当我滚动ListView时,有两个问题:
(1)微调器项目中显示的(选定)值有时会发生变化,尽管我只是滚动!! 当我点击微调器时,仍会显示旧的选定值(一个,应由微调器显示)(2)滚动时ListViewItems 的顺序发生变化!
=>但是适配器中的数据不会改变(数据本身和订单都没有) - 所以它一定是View本身的问题?!也许android缓存在后台,并不会很快刷新ListViewItems或者像那样?!
有人能帮帮我吗?
多谢!
好吧,我找到了一个不太好的解决方案,但它确实有效.我只是不再使用convertView,尽管这对于内存和性能来说并不是最理想的.在我的情况下它应该没问题,因为我的ListView的最大项目数是15.这是我的Adapter-Class:
public class FinAdapter extends ArrayAdapter<Param>{
public Param[] params;
private boolean merkzettel;
protected EditText pv;
public FinAdapter(Context context, int textViewResourceId, Param[] items, boolean merkzettel) {
super(context, textViewResourceId, items);
this.params = items;
this.merkzettel = merkzettel;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Param p = params[position];
if(p != null){
if(merkzettel){
if (convertView == null) {
LayoutInflater …Run Code Online (Sandbox Code Playgroud) 所以我遇到组成我的ListView的不同部分的问题.我把它们放到一个ArrayList中并使用一个自定义的ArrayAdapter来连接我之前做过的ListView,所以我不相信那里有问题.最初,列表似乎按正确的顺序排列,但随后我将向下滚动列表,然后内容将以不正确的顺序加载.然后我向上滚动,一切都混乱.有没有人遇到过这个?
谢谢 - 杰克
我有一个用于显示名称的列表视图。如果我滚动屏幕,它会显示错误的名称。我知道这是一个常见的错误,根源于适配器的 getView 方法,但是尽管遵循了许多现有讨论中提出的方法,但仍无法解决它。
我已将我的代码粘贴在下面。如果有人能够识别该错误,那就太好了。
定制适配器
public class ListArrayAdapter extends ArrayAdapter<client> {
HashMap<String, Integer> hMap = new HashMap<String, Integer>();
private Context cntxt;
private List<client> client_list;
private int textviewres;
public ListArrayAdapter(Context context, int textViewResourceId, List<client> objects) {
super(context,textViewResourceId,objects);
this.cntxt = context;
this.textviewres = textViewResourceId;
this.client_list = objects;
for(int j=0; j<client_list.size(); j++){
Log.d("ListArrayAdapter", "Position No" +j +": " +client_list.get(j).getName());
Log.d("ListArrayAdapter", "Total elements in the client list is "+client_list.size());
}
}
@Override
public long getItemId(int position) {
client item = getItem(position);
return item.getID();
} …Run Code Online (Sandbox Code Playgroud)