2014-04-08 117 views
0

我试图在我的应用程序中实现此功能,并且我知道这个问题以前曾被问过,但我没有明白。在这一刻,我通过JSON请求检索所有项目。Android在底部自动加载列表视图中的更多项目

myTicketsFragment.java

private class PrefetchData extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = new ProgressDialog(getActivity()); 
     dialog.setMessage("Downloading.."); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     HttpReader httpReader = new HttpReader(); 
     httpReader 
       .setOnResultReadyListener(new HttpReader.OnResultReadyListener() { 
        @Override 
        public void resultReady(String result) { 
         JsonHelper jsonHelper = new JsonHelper(); 
         tickets = jsonHelper.getTickets(result); 

         TicketAdapter ticketAdapter = new TicketAdapter(
           getActivity(), tickets); 
         final ListView listViewTickets = (ListView) rootView 
           .findViewById(R.id.listViewTickets); 
         listViewTickets.setAdapter(ticketAdapter); 

         listViewTickets 
           .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
            @Override 
            public void onItemClick(
              AdapterView<?> parentView, 
              View childView, int position, 
              long id) { 

             if (isNetworkAvailable()) { 
              Bundle bundle = new Bundle(); 
              bundle.putInt("ticketId", 
                tickets.get(position) 
                  .getId()); 
              Intent ticketDetail = new Intent(
                getActivity(), 
                TicketActivity.class); 
              ticketDetail.putExtras(bundle); 
              startActivity(ticketDetail); 
             } else { 
              showNoInternetDialog(); 
             } 
            } 
           }); 
         listViewTickets.setEmptyView(rootView 
           .findViewById(R.id.empty)); 
         dialog.dismiss(); 
        } 
       }); 
     httpReader 
       .execute("http://aa.aaaa.aa:8882/desk/API/v1/json.php?auth=platformt&a=getTickets&uauth=" 
         + authCode + "&uid=" + uId + "&mode=mytickets"); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
    } 
} 

我想我需要知道最后一项显示和检索新的..我只是真的不明白的技术,我不能找到一个很好的例。

如果有人能带领我走向正确的方向,那会很棒!

回答

1

我建议你将ListViewAsyncTask中移出。如果你这样做,你可以以这样的方式实现延迟加载(这里是一个基本的想法):

public class MyActivity extends Activity { 
    private MyAdapter myAdapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ListView listView = findViewById(R.id.listView); 
     listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) { 

      } 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
       boolean loadMore = 
         firstVisibleItem + visibleItemCount >= totalItemCount; 
       if (loadMore) { 
        AsyncTask<Integer, Void, JSONObject> asyncTask = new AsyncTask<Integer, Void, JSONObject>() { 
         @Override 
         protected void onPreExecute() { 
          //do stuff, show loading image 
         } 

         @Override 
         protected void onPostExecute(JSONObject jsonObject) { 
          myAdapter.data = jsonObject; 
          myAdapter.notifyDataSetChanged(); 
         } 

         @Override 
         protected JSONObject doInBackground(Integer... params) { 
          int startValue = params[0]; 
          //make a request with pointing offset = startValue 
          return new JSONObject(); 
         } 
        }; 
        int startValue = totalItemCount; 
        asyncTask.execute(startValue); 
       } 
      } 
     }); 
    } 
} 

所以当你看到的ListView的最后一个项目,那么就下载额外的数据,并将其推入适配器。

+0

我使用asynctask作为我的加载对话框:s – Niels

+0

@Niels你可以在'AsyncTask'里面放置'ProgressDialog',这没关系。但请记住,在加载过程中显示“PG”并不是最好的模式 – nikis

相关问题