2014-12-15 3 views
0

에 추가하십시오. 내 활동에 대한 gridview가 있습니다. json을 통해 데이터를 가져 와서 어댑터에 추가합니다. android- 동적으로 더 많은 항목을 사용자 정의 gridview json

코드입니다 :

gridView = (GridView) findViewById(R.id.gridView); 

contactList = new ArrayList<HashMap<String, String>>(); 
new GetContacts().execute(); 

private class GetContacts extends AsyncTask<Void, Void,ArrayList<HashMap<String, String>>> {    
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 

    @Override 
    protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) { 
     Spots_tab1_json sh = new Spots_tab1_json(); 
     String jsonStr = sh.makeServiceCall(url+page, Spots_tab1_json.GET); 
     ArrayList<HashMap<String, String>> dataC = new ArrayList<HashMap<String, String>>(); 

     if (jsonStr != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 
       contacts = jsonObj.getJSONArray(TAG_CONTACTS); 
       if(contacts.length()<20) 
         loadmore=false; 

       for (int i = 0; i < contacts.length(); i++) { 
        JSONObject c = contacts.getJSONObject(i); 
        HashMap<String, String> contact = new HashMap<String, String>(); 
        contact.put("id", new String(c.getString("id").getBytes("ISO-8859-1"), "UTF-8")); 
        contact.put("url", new String(c.getString("url").getBytes("ISO-8859-1"), "UTF-8")); 
        contact.put("text", new String(c.getString("text").getBytes("ISO-8859-1"), "UTF-8")); 
        dataC.add(contact); 
       } 
      } catch (JSONException e) { 
       goterr=true; 
      } catch (UnsupportedEncodingException e) { 
       goterr=true; 
      } 
     } else { 
      Log.v("this","mi;;"); 
      goterr=true; 
     } 
     return dataC; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 
     super.onPostExecute(result); 

     if(!isCancelled() && goterr==false){ 
      if(ladap==null){ 
       ladap=new ListAdapter(FistActiivty.this,result); 
       gridView.setAdapter(ladap); 
      }else{ 
       ladap.addAll(result); 
      } 

     }else{ 
      MyToast.makeText(FistActiivty.this, DariGlyphUtils.reshapeText(getResources().getString(R.string.problemload))); 
     } 

    } 
} 

public class ListAdapter extends BaseAdapter { 
    Activity activity; 
    public ArrayList<HashMap<String,String>> list; 

    public ListAdapter(Activity activity, ArrayList<HashMap<String, String>>list) { 
     super(); 
     this.activity=FistActiivty.this; 
     this.list=list; 
    } 
    public HashMap<String, String> geting(int position) { 
     return list.get(position); 
    } 

    public void addAll(ArrayList<HashMap<String, String>> result) { 
     if(this.list==null){ 
      //this.list = new ArrayList<HashMap<String, String>>(); 
      this.list =result; 
     }else{ 
      this.list.addAll(result); 
     } 
     //list.addAll(result); 
     notifyDataSetChanged(); 
    } 

    public int getCount() { 
     return list.size(); 
    } 

    public Object getItem(int position) { 
     return list.get(position); 
    } 

    public long getItemId(int arg0) { 
     return 0; 
    } 


    private class ViewHolder { 
     TextView Message; 
     ImageView img ; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.row_grid, null); 
      holder = new ViewHolder(); 
      holder.Message = (TextView) convertView.findViewById(R.id.text); 
      holder.Message.setTypeface(typeface); 
      holder.img=(ImageView)convertView.findViewById(R.id.image); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     item = list.get(position); 
     String text = item.get("text"); 
     Log.v("this","11"+ text); 

     holder.Message.setText(text); 

     String imgurl = item.get("url"); 
     if(imgurl.length()>5) 
      imageLoader.displayImage(imgurl, holder.img,options, imageListener); 
     else 
      holder.img.setImageDrawable(getResources().getDrawable(R.drawable.noimage)); 

     return convertView; 
    } 

확인,이 단계에서, 내가 JSON을 통해 인터넷에서 데이터를 얻을, ListAdapter에 게시 내 gridview에와 아무 문제에 추가합니다.

listview에서 우리는 listview의 맨 아래에 도달하면 더 많은 데이터를 요청할 수 있습니다. 그러나 gridview의 끝에 도달하는 항목을 더 추가하려면 함수를 어떻게 호출 할 수 있습니까?

답변

1

이것을 구현하는 가장 좋은 방법은 PullToRefreshLibraryhere을 사용하는 것입니다. 해당 라이브러리를 작업 영역으로 가져오고 onPullUpToRefresh를 사용하여 setOnRefreshListener를 구현하십시오. 이것은 목록의 끝을 나타냅니다. 목록 끝에 도달하면 더 많은 데이터를 보도록 서버에 요청을 설정할 수 있습니다.

서버에서 페이지 번호을 구현하여 목록의 끝에 도달 할 때마다 다음 데이터 집합을로드 할 수 있습니다.

이 정보가 도움이되기를 바랍니다.

+0

답장을 보내 주셔서 감사합니다. 작동하지만 그리드 뷰가 끝나면 전화해야합니다. 어떻게 할 수 있습니까? –

+0

격자보기의 끝 부분에 도달하면 onPullUpToRefresh가 트리거 될 것입니다! 당신이 그것을 구현 했습니까? 그것은 어떻게 행동 했습니까? –

관련 문제