2014-04-08 2 views
0

이 기능을 내 앱에 구현하려고하는데이 질문은 이전에 요청했지만 잘 모르겠습니다. 이 순간 JSON 요청에 따라 모든 항목을 검색합니다.안드로이드는 하단에있는 경우 목록보기에 더 많은 항목을 자동으로로드합니다.

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

관련 문제