我有一个适配器为我的listView,数据填充从互联网,后台进程运行良好,结果出现在日志猫,但没有在我的列表视图,这里有什么问题?我做错了吗?以下是我的代码
PortalGroup mPortalGroup;
ArrayList<PortalItemData> mItems;
PortalItemListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group);
getActionBar().setDisplayHomeAsUpEnabled(true);
new MyPortal().execute();
mItems = new ArrayList<PortalItemData>();
mAdapter = new PortalItemListAdapter(getApplicationContext(), mItems);
JazzyListView list = (JazzyListView) findViewById(R.id.listGroup);
list.setAdapter(mAdapter);
list.setTransitionEffect(new FlyEffect());
}
private class MyPortal extends AsyncTask<Void, Void,Void> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(GroupActivity.this);
pDialog.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss(DialogInterface dialogInterface) {
MyPortal.this.cancel(true);
}
});
pDialog.setMessage("Loading...");
pDialog.show();
}
protected Void doInBackground(Void... params) {
Portal portal = AccountManager.getInstance().getPortal();
try {
PortalInfo portalInfo = portal.fetchPortalInfo();
List<String> querys = portalInfo.getFeaturedGroupsQueries();
for (String query : querys) {
Log.d("Query Group", "[query] " + query);
PortalQueryResultSet<PortalGroup> result = portal
.findGroups(new PortalQueryParams(query));
for (PortalGroup group : result.getResults()) {
Log.d("Available Group", "[group title] " + group.getTitle());
PortalQueryParams queryParams = new PortalQueryParams();
queryParams.setQuery(PortalItemType.WEBMAP, group.getGroupId(), null);
PortalQueryResultSet<PortalItem> results = portal.findItems(queryParams);
for (PortalItem item : results.getResults()) {
Log.d("Group Item", "[item title] " + item.getTitle());
byte[] data = item.fetchThumbnail();
if (data != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
PortalItemData portalItemData = new PortalItemData(item, bitmap);
mItems.add(portalItemData);
}
}
}
}
pDialog.dismiss();
} catch (Exception e) {
e.printStackTrace();
onError(e);
}
return null;
}
public void onError(Throwable e) {
Toast.makeText(GroupActivity.this, getString(R.string.failed_sign_in), Toast.LENGTH_SHORT).show();
pDialog.dismiss();
}
protected void onPostExecute() {
mAdapter.notifyDataSetChanged();
pDialog.dismiss();
}
}
private class PortalItemListAdapter extends ArrayAdapter<PortalItemData> {
private LayoutInflater inflater=null;
public PortalItemListAdapter(Context context, ArrayList<PortalItemData> items) {
super(context, 0, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_group, parent, false);
}
// Setup item thumbnail
PortalItemData item = getItem(position);
ImageView image = (ImageView) convertView.findViewById(R.id.img);
image.setImageBitmap(item.itemThumbnail);
// Setup item title
TextView text = (TextView) convertView.findViewById(R.id.txt);
text.setText(item.portalItem.getTitle());
return convertView;
}
}
private class PortalItemData {
PortalItem portalItem;
Bitmap itemThumbnail;
public PortalItemData(PortalItem item, Bitmap bt) {
this.portalItem = item;
this.itemThumbnail = bt;
}
}发布于 2015-11-26 18:14:52
在onPostExecute中,您可能想要填充您的ListView。
在获取doInBackground的值之后,在mItems中实例化您的Adapter,即mAdapter。最后,在onPostExecute中将Adapter设置为ListView。
发布于 2015-11-26 18:22:56
2个解决方案
在
mAdapter.notifyDataSetChanged() on mAdapter.notifyDataSetChanged()在某些情况下,您当前的代码实际上会导致Exception
发布于 2015-11-26 18:26:30
使用下面的代码
private class MyPortal extends AsyncTask<Void, Void,Void> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(GroupActivity.this);
pDialog.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss(DialogInterface dialogInterface) {
MyPortal.this.cancel(true);
}
});
pDialog.setMessage("Loading...");
pDialog.show();
}
protected Void doInBackground(Void... params) {
Portal portal = AccountManager.getInstance().getPortal();
try {
PortalInfo portalInfo = portal.fetchPortalInfo();
List<String> querys = portalInfo.getFeaturedGroupsQueries();
for (String query : querys) {
Log.d("Query Group", "[query] " + query);
PortalQueryResultSet<PortalGroup> result = portal
.findGroups(new PortalQueryParams(query));
for (PortalGroup group : result.getResults()) {
Log.d("Available Group", "[group title] " + group.getTitle());
PortalQueryParams queryParams = new PortalQueryParams();
queryParams.setQuery(PortalItemType.WEBMAP, group.getGroupId(), null);
PortalQueryResultSet<PortalItem> results = portal.findItems(queryParams);
for (PortalItem item : results.getResults()) {
Log.d("Group Item", "[item title] " + item.getTitle());
byte[] data = item.fetchThumbnail();
if (data != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
PortalItemData portalItemData = new PortalItemData(item, bitmap);
mItems.add(portalItemData);
}
}
}
}
pDialog.dismiss();
} catch (Exception e) {
e.printStackTrace();
onError(e);
}
return null;
}
public void onError(Throwable e) {
Toast.makeText(GroupActivity.this, getString(R.string.failed_sign_in), Toast.LENGTH_SHORT).show();
pDialog.dismiss();
}
protected void onPostExecute() {
list.setAdapter(mAdapter);
list.setTransitionEffect(new FlyEffect());
pDialog.dismiss();
}}
https://stackoverflow.com/questions/33935799
复制相似问题