请问关于XListView的 下拉更新的问题

Android 码拜 10年前 (2015-05-11) 990次浏览 0个评论
 

请问,使用XListView的显示从网络数据库获取的数据。
刚开始调用: updatenetworkdata ()获取网络数据库最新的数据。比如说 第一次调用后merChatList得到的数据是:
a
b
c

那么当下拉屏幕的时候,就会调用 onRefresh() 函数 在次函数里边 再次调用updatenetworkdata ()函数。假设这时候 网络数据库没有更新,那么这时候
merChatList的数据为:
a
b
c
a
b
c

也就是重复了。
本来就想 当下拉更新的时候, //mMemberChatList.clear();
先清除数据,然后获取最新的数据的。
但是这样重新取数据的话,会很费时的。再说  有时候 网数据库只更新了 一条数据,如果把之前删除了,再取就好像
有点不妥。

请会的朋友帮忙回复下,这个应该怎么处理,谢谢啦

public void updatenetworkdata (final String url, final MemberChatCallBack callBack){

        new Thread() {
         public void run() {
              //mMemberChatList.clear();
         String objectString = objectToString();
                String info = CustomHttpClient.postByHttpClient(objectString);
                try {
                JSONObject jsonObject = new JSONObject(info);
         String total = jsonObject.getString(“total”);
         JSONArray jsonArray = jsonObject.getJSONArray(“data”); 
         for( int i=0;i<jsonArray.length();i++ ) {
         JSONObject item = jsonArray.getJSONObject(i);
         String chatid = item.getString(“chatid”);
         String userid = item.getString(“userid”);
         String photo = item.getString(“photo”);
         String nickname = item.getString(“nickname”);
         String fullname = item.getString(“fullname”);
         String sex = item.getString(“sex”);
         String from1 = item.getString(“from1”);
         String from2 = item.getString(“from2”);
         String like  = item.getString(“like”);
         String type  = item.getString(“type”);
         String content = item.getString(“content”);
                    merChatList.add(new Info(total,chatid,userid,photo,nickname,fullname,sex,from1,from2,like,type,content));
             }

         }
         } catch (Exception e) { 
         Log.d(TAG,”+Exception e “+e);
         }
                callBack.onDone(merChatList);
            }
        }.start();
    }

60分
判断是否数据改变  改变了就清理掉重新弄吧  如果没改变就不动了被  因为你网上获取的  哪怕只改变一条也没准是中间的一条被删除了  那怎么办。。。
@ u013280307   谢谢您的回复
还想请问下:

在fragment里边: 当下拉更新的时候,会调用onRefresh() 函数:
 当下拉更新的时候,比如说 设置的时间是5000, 但是当那个下拉更新的图标提示消失了,而 那个mChat.updatedata()里边数据还没有解析完,但是它是回调了这个onDone()函数了。  
。。。。
mListView.setXListViewListener(new IXListViewListener(){
                 public void onRefresh() {
                 mmHandler.postDelayed(new Runnable() {
                                                 @Override
                                                 public void run() {
                                                         mChat.updatedata(null,new ChatCallBack(){
                                                         public void onDone(ListMemberInfo> list){
                                                                 listdata.clear();
                                                                 listdata= list;        
                                                                 Message mes = mHandler.obtainMessage(2);
                                                                         mHandler.sendMessage(mes);
                                                        }
                                                 });
                                                         mListView.stopRefresh();
                                                         mListView.stopLoadMore();
                                                 }
                                         }, 5000);
                                 }
 private final Handler mHandler = new Handler() {
                         public void handleMessage(Message msg) {
                                 switch (msg.what) {
                                 case 1:                                        
                                         mGetAdapter = ChatGetAdapter(getActivity(),listdata);
                     mListView.setAdapter(mGetAdapter);
                                         break;
                                 case 2:

                                         mGetAdapter.update(listdata);
                                         break;
                                 default:
                                         break;
                                 }
                                 super.handleMessage(msg);
                         }
             };

 —————————————

public class GetAdapte extends BaseAdapter { 
。。。。
public GetAdapte( Context context,List<MemberInfo>list ) {        
                 super();
                 this.context = context;
                 layoutInflater = (LayoutInflater)context.getSystemService(inflater);

                 this.mberlist = list;
         }

         public void setmList( List<MemberInfo> mList) {
                 this.Memberlist = mList;
                 
         }

         public void update(List<Info> list) {
                 setmList(list);
                 this.notifyDataSetChanged();
         }
         public View getView(int position,View convertView,ViewGroup parent ) {
           。。。。。。。。。。。
        }
         }

还有一个问题是:上面的代码会出现以下错误提示:
请问  它是通过 sendmessage()然后在mGetAdapter.update(listdata);  这个应该怎么处理呢?

04-21 14:24:20.773: E/AndroidRuntime(9805): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131296482, class com.example.view.XListView) with Adapter(class android.widget.HeaderViewListAdapter)]
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.widget.ListView.layoutChildren(ListView.java:1566)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.widget.AbsListView$CheckForTap.run(AbsListView.java:3807)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.os.Handler.handleCallback(Handler.java:733)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.os.Handler.dispatchMessage(Handler.java:95)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.os.Looper.loop(Looper.java:157)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at android.app.ActivityThread.main(ActivityThread.java:5387)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at java.lang.reflect.Method.invokeNative(Native Method)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at java.lang.reflect.Method.invoke(Method.java:515)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-21 14:24:20.773: E/AndroidRuntime(9805):  at dalvik.system.NativeStart.main(Native Method)

下拉刷新不应该是写死时间吧。。。应该是异步啊。。。。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请问关于XListView的 下拉更新的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!