gpt4 book ai didi

Android:在自定义适配器中调用了两次 getView()

转载 作者:可可西里 更新时间:2023-11-01 19:05:47 24 4
gpt4 key购买 nike

我正在将自定义 SimpleCursorAdapter 设置为 ListView。出于某种原因,对于数据库中的每个项目,FriendAdapter 的 getView() 被调用两次。经过一些调查(我的 contact_list.xml 中没有 wrap_content),我仍然不明白为什么。

可能是什么原因?有人可以帮忙吗?

谢谢

ContactSelection.java

public class ContactSelection extends ListActivity {

private WhipemDBAdapter mDbHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mDbHelper = new WhipemDBAdapter(this);
mDbHelper.open();

setContentView(R.layout.contact_list);

Cursor c = mDbHelper.fetchAllFriends();
startManagingCursor(c);
String[] from = new String[] {};
int[] to = new int[] {};

setListAdapter(new FriendAdapter(this, R.layout.contact_row, c, from, to));

getListView().setItemsCanFocus(false);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}

@Override
protected void onResume() {
super.onResume();
mDbHelper.open();
}

@Override
protected void onPause() {
super.onPause();
mDbHelper.close();
}
}

friend 适配器.java

public class FriendAdapter extends SimpleCursorAdapter implements OnClickListener {

private Context mContext;
private int mLayout;
private Cursor mCursor;
private int mNameIndex;
private int mIdIndex;
private LayoutInflater mLayoutInflater;
private final ImageDownloader imageDownloader = new ImageDownloader();

private final class ViewHolder {
public TextView name;
public ImageView image;
public CheckBox checkBox;
}

public FriendAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);

this.mContext = context;
this.mLayout = layout;
this.mCursor = c;
this.mNameIndex = mCursor.getColumnIndex(WhipemDBAdapter.KEY_NAME);
this.mIdIndex = mCursor.getColumnIndex(WhipemDBAdapter.KEY_FB_ID);
this.mLayoutInflater = LayoutInflater.from(context);
}

public View getView(int position, View convertView, ViewGroup parent) {
if (mCursor.moveToPosition(position)) {
ViewHolder viewHolder;

if (convertView == null) {
convertView = mLayoutInflater.inflate(mLayout, null);

viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.contact_name);
viewHolder.image = (ImageView) convertView.findViewById(R.id.contact_pic);
viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
viewHolder.checkBox.setOnClickListener(this);

convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}

String name = mCursor.getString(mNameIndex);
String fb_id = mCursor.getString(mIdIndex);
boolean isChecked = ((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id);

viewHolder.name.setText(name);
imageDownloader.download("http://graph.facebook.com/"+fb_id+"/picture", viewHolder.image);

viewHolder.checkBox.setTag(fb_id);
viewHolder.checkBox.setChecked(isChecked);
}

return convertView;
}

@Override
public void onClick(View v) {
CheckBox cBox = (CheckBox) v;
String fb_id = (String) cBox.getTag();

if (cBox.isChecked()) {
if (!((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
((GlobalVars) mContext.getApplicationContext()).addSelectedFriend(fb_id);
} else {
if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
((GlobalVars) mContext.getApplicationContext()).removeSelectedFriend(fb_id);
}

}
}

contact_row.xml

<?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="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/contact_pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/contact_name"
android:textSize="10sp"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/checkbox"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

联系人列表.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="No items"/>
</LinearLayout>

最佳答案

这是正常的,当您的 ListView 带有 height=wrap_content(以及其他)时可能会发生:

看最后一个帖子:http://groups.google.com/group/android-developers/browse_thread/thread/4c4aedde22fe4594

关于Android:在自定义适配器中调用了两次 getView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com