gpt4 book ai didi

android ListView 不填充

转载 作者:太空狗 更新时间:2023-10-29 12:49:29 25 4
gpt4 key购买 nike

我正在做的是从 facebook 获取好友列表,并尝试用好友姓名和他的个人资料图片填充 ListView ,但没有异常,logcat 列表中出现的错误大小为 56,数据在数组列表中但未填充在 UI 上不知道为什么请给我建议解决方案,这是我的 Activity getFriendList 函数代码:

public List<Friend> getFriendList(){

Request request = Request.newMyFriendsRequest(Session.getActiveSession(), new Request.GraphUserListCallback() {

@Override
public void onCompleted(List<GraphUser> users, Response response) {
// TODO Auto-generated method stub
for(int i=0; i<users.size();i++)
{
GraphUser user = users.get(i);
Friend objFriend = new Friend();
objFriend.setFriendID(user.getId());
objFriend.setFriendName(user.getName());
//objFriend.setFriendPic(user.g)
//objFriend.setFriendPic("http://graph.facebook.com/" + objFriend.getFriendID() + "/picture");
friendsList.add(objFriend);
Log.d("Friend's Id", objFriend.getFriendID());
Log.d("Friend's Name", objFriend.getFriendName());
//Log.d("Friend's Pic", objFriend.getFriendPic());
Log.d("Friend's List Count", Integer.toString(friendsList.size()));
}
}
});
Request.executeBatchAsync(request);
return friendsList;
}

这是我的 onCreate 函数:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.friends_list);
list = (ListView)findViewById(R.id.listview_friends);
friendsList = getFriendList();
friendAdapter = new FriendAdapter(this, R.layout.activity_friends, friendsList);
list.setAdapter(friendAdapter);
}

这是我的自定义适配器代码:

public class FriendAdapter extends ArrayAdapter<Friend>
{
Context context;
Friends holder;
int layoutResourceId;
List<Friend> friendList;
Bitmap profilePhoto;

public FriendAdapter(Context context, int layoutResourceId,List<Friend> friendList)
{
super(context, layoutResourceId, friendList);
this.context=context;
this.layoutResourceId=layoutResourceId;
this.friendList=friendList;
}


@Override
public View getView(int position,View convertView,ViewGroup parent)
{
View row=convertView;

if(row==null)
{
LayoutInflater inflater=((Activity)context).getLayoutInflater();
row=inflater.inflate(layoutResourceId, parent,false);

holder=new Friends();
//holder.friendProfilePic=(ImageView)row.findViewById(R.id.ImageViewfriendProfilePic);
holder.friendName = (TextView)row.findViewById(R.id.textViewFriendsName);

row.setTag(holder);
}
else
{
holder=(Friends)row.getTag();
}
//
holder.friendName.setText(friendList.get(position).getFriendName());
//holder.friendProfilePic.setImageBitmap(profilePhoto);

return row;
}

这是我的 xml 布局 friends_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/listview_friends"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

这里是 activity_friends.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<ImageView
android:id="@+id/ImageViewfriendProfilePic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:src="@drawable/com_facebook_button_grey_focused" />

<TextView
android:id="@+id/textViewFriendsName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dip"
android:layout_marginTop="20dip"
android:text="TextView" />
</RelativeLayout>



</LinearLayout>

最佳答案

不要这样使用列表。

friendsList = getFriendList();

当请求被发送并且你得到结果时,这可能需要一些时间,所以像这样声明你的列表对象

List<Friends> friendList = new ArrayList<Friends>();

只需将此数组列表作为空数组传递给适配器并将适配器设置为列表

friendAdapter = new FriendAdapter(this, R.layout.activity_friends, friendsList);
list.setAdapter(friendAdapter);

现在使用 AsyncTask 类在后台从 Web 获取数据,这样 UI 就不会停止,它会在后台获取

已更新

AsyncTask FetchFriendList = new AsyncTask<Void,Void,Void>(){
private List<Friends> list;
public void doInBackground(Void... param){
list = getFriendList(); // call here your request
}

public void onPostExecution(Void result){
friendList.addAll(list);
friendAdapter.notifyDatasetChanged();

}
};

在设置适配器后在 onCreate 中调用它

FetchFriendList ffl = new FetchFriendList();
ffl.execute();

还有一件事,当您在列表中添加/编辑/删除项目时,您必须调用 notifyDatasetChanged();并且不要在 UI 中添加/删除太多它可能会强制关闭大数据

关于android ListView 不填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14021811/

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