【发布时间】:2014-06-10 04:34:09
【问题描述】:
在我的例子中,我使用片段作为活动中的选项卡。我想在创建片段时加载信息。所以我使用 Runnable 来运行 httprequest 并将这些响应放回我调用 mAdapter.notifyDataSetChanged() 的片段内的自定义处理程序
问题来了,我调用notifyDataSetChanged()方法后,fragment里面的listView没能更新它的view。
我跟踪堆栈发现在调用notifyDataSetChanged()之后,适配器确实调用了它的方法getCount()和getCount()确实返回了一个大于零的值,但是适配器没有调用它的方法getView()在getCount()的电话之后。
public class ProductReviewFragment extends Fragment {
private View mBackgroundView = null;
private ProductHelper mProductHelper = null;
private PullToRefreshListView mListView = null;
private int pre = 20;
private long mark = 0;
private long productId = 0;
private List<ProductThread> listProductThread = new ArrayList<ListProductReviewResponse.ProductThread>();
private class MyHandler extends Handler{
private ProductReviewFragment mActivity = null;
public MyHandler(ProductReviewFragment activity){
mActivity = activity;
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case ProductHelper.GET_PRODUCT_REVIEW_SUCCESS:
ListProductReviewResponse response = (ListProductReviewResponse)msg.obj;
if (response != null) {
if (response.getProductThreadList()!=null) {
mActivity.listProductThread.addAll(response.getProductThreadList());
}
mActivity.mark = response.getMark();
mActivity.mAdapter.notifyDataSetChanged();
}
mActivity.mListView.onRefreshComplete();
if (mActivity.listProductThread.size()>=response.getTotalNumber()) {
mActivity.mListView.setMode(Mode.DISABLED);
}
break;
case ProductHelper.GET_PRODUCT_REVIEW_FAILED:
mActivity.mListView.onRefreshComplete();
if (msg.obj!=null) {
NetWorkException exception = (NetWorkException)msg.obj;
NetWorkException.handlerResultNetWorkNotAvailable(mActivity.getActivity(), exception);
}
default:
break;
}
}
}
private MyHandler mHandler = new MyHandler(this);
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
int i = listProductThread.size();
return i;
}
@Override
public Object getItem(int position) {
return listProductThread.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null) {
holder = new ViewHolder();
convertView = View.inflate(getActivity(), R.layout.product_review_cell, null);
holder.rivHead = (RoundImageView)convertView.findViewById(R.id.product_comment_head);
holder.tvName = (TextView)convertView.findViewById(R.id.product_comment_user);
holder.tvContent = (TextView)convertView.findViewById(R.id.product_comment_content);
convertView.setTag(holder);
}
holder = (ViewHolder)convertView.getTag();
holder.rivHead.setImageInfo(ImageInfo.obtain(ImageCategories.CATEGORY_ROUND_HEAD, listProductThread.get(position).getUser().getAvatarURL()));
holder.tvName.setText(listProductThread.get(position).getUser().getUserName());
holder.tvContent.setText(listProductThread.get(position).getContent());
return convertView;
}
private class ViewHolder {
RoundImageView rivHead = null;
TextView tvName = null;
TextView tvContent = null;
}
}
private MyAdapter mAdapter = new MyAdapter();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle!=null) {
productId = bundle.getLong(ProductHelper.PRODUCT_ID);
}
mProductHelper = new ProductHelper(getActivity().getApplicationContext());
mProductHelper.getProductReview(productId, mark, pre, mHandler);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBackgroundView = inflater.inflate(R.layout.pulltorefresh_list_fragment, null);
return mBackgroundView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initUI();
}
public void initUI(){
mListView = (PullToRefreshListView) mBackgroundView.findViewById(R.id.fragment_listview);
mListView.setMode(Mode.PULL_FROM_END);
mListView.setAdapter(mAdapter);
}
}
【问题讨论】:
-
y mActivity.mAdapter.notifyDataSetChanged();?你可以简单地使用 adpter.noti.... 我看不到 mAdapter 声明
-
mAdapter的声明在onCreate()方法之上
标签: android listview android-fragments