2013-04-04 55 views
2

我想顯示我的JSON到gridview,之前..我顯示我的JSON到ListView,它的工作原理。但在BaseAdapter,我不知道怎麼送我的JSON,我已經投入到ArrayList的底座適配器如何將ArrayList發送到BaseAdapter Android

,所以這是我的源代碼:

活動:

public class MainActivity extends ListActivity { 
    List AgenList = new ArrayList(); 
     boolean boolStatusKoneksi=true; 
     private ProgressDialog Dialog; 
     protected Context applicationContext; 
     @Override 
     public void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState);  
      setContentView(R.layout.activity_main); 
      new AgenAsyncTask().execute(); 
      GridView gridview = (GridView) findViewById(R.id.gridview); 
      gridview.setAdapter(new AgenAdapter(this)); 
     } 


    public class AgenAsyncTask extends AsyncTask<String, String, String> 
    { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      Dialog = new ProgressDialog(MainActivity.this); 
      Dialog.setMessage("Mohon Tunggu sebentar..."); 
      Dialog.setIndeterminate(false); 
      Dialog.setCancelable(true); 
      Dialog.show(); 
     } 


     protected String doInBackground(String... args) { 

       String url = ("http:10.10.2/selectAgent.htm"); 

        try{ 
         JSONParser j=new JSONParser(); 
         JSONArray jsonArray = j.takeJson(url);; 

         for(int i =0; i<jsonArray.length(); i++){ 
          JSONObject c = jsonArray.getJSONObject(i); 


          HashMap<String, String> map = new HashMap<String, String>(); 
          if (c.has("atasan")) 
           map.put("atasan", c.get("atasan").toString()); 
          if (c.has("nama_agen")) 
           map.put("nama_agen", c.get("nama_agen").toString()); 
          if (c.has("kode_agen")) 
           map.put("kode_agen", c.get("kode_agen").toString()); 
          if (c.has("no_aaji")) 
           map.put("no_aaji", c.get("no_aaji").toString()); 
          if (c.has("jenis")) 
           map.put("jenis", c.get("jenis").toString()); 
           AgenList.add(map); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
         } 
        return null; 
        } 


     @Override 
     protected void onPostExecute(String file_url) { 

     } 
    } 

這是我的BaseAdapter:

public class AgenAdapter extends BaseAdapter { 

     public AgenAdapter(MainActivity mainActivity) { 

     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater layout = getLayoutInflater(); 
      View view= layout.inflate(R.layout.list_item,parent,false); 

      TextView ATASAN = (TextView) findViewById(R.id.atasan); 
      TextView NAMA_AGEN= (TextView) findViewById(R.id.nama_agen); 
      TextView KODE_AGEN= (TextView) findViewById(R.id.kode_agen); 
      TextView NO_AAJI= (TextView) findViewById(R.id.no_aaji); 
      TextView JENIS= (TextView) findViewById(R.id.jenis); 
      return view; 
     } 
    } 
} 

正如你看到的,我有命名爲= AgenList ArrayList的,但我沒有把它放到我的BaseAdapter。

+0

沒有你設法解決這個問題? – 2013-10-08 05:05:24

回答

3

做一個參數化的構造函數,並將你的數組列表傳遞給它的參數。所以你的班級將會像

public class AgenAdapter extends BaseAdapter { 
List<yourObj> list; 
Activity a; 
    public AgenAdapter(Activity activity,List<yourObj> list) { 
     this.a=activity; 
     this.list=list; 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return list.size();///////return size of list 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position;///// dont return null here 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position;/////////return position as itemID 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater layout = getLayoutInflater(); 
     View view= layout.inflate(R.layout.list_item,parent,false); 

     TextView ATASAN = (TextView) findViewById(R.id.atasan); 
     TextView NAMA_AGEN= (TextView) findViewById(R.id.nama_agen); 
     TextView KODE_AGEN= (TextView) findViewById(R.id.kode_agen); 
     TextView NO_AAJI= (TextView) findViewById(R.id.no_aaji); 
     TextView JENIS= (TextView) findViewById(R.id.jenis); 
     return view; 
    } 
} 
+0

它不工作,所有我需要的是如何把我的ArrayList包含我的JsonArray – 2013-04-04 04:37:34

+1

如果你想發送任何數據到你的適配器,你將不得不使用相同的技術,使用適配器的參數化構造函數發送你的數據類,如果是JSONArray,你的方法將如下所示: JSONArray list; 活動a; public AgenAdapter(活動活動,JSON數組列表){this.a = activity; this.list = list; } – 2013-04-04 04:42:39

+0

我必須這樣做,但我在我的應用程序中強行停止... – 2013-04-04 04:51:42

1

試試這個。

gridview.setAdapter(new AgenAdapter(this), AgenList); 

並使用您的onPostExecute這一行()代替的onCreate()

像這樣:

@Override 
    protected void onPostExecute(String file_url) { 
    gridview.setAdapter(new AgenAdapter(this), AgenList); 

    } 
+0

它不起作用 – 2013-04-04 06:52:11

1

看一看ArrayAdapter。它包含基於ArrayList的適配器的所有實現。

  1. 使您的適配器成爲ArrayAdapter的子類,給出參數化類型。在這種情況下你是Map<String, String>

    public class ResultAdapter extends ArrayAdapter<Map<String,String>> { 
    
        private int mResource; 
    
        /** 
        * @param context 
        * @param resource 
        */ 
        public ResultAdapter(Context context, int resource, ArrayList<Map<String,String>> dataList) { 
         super(context, resource, dataList); 
         this.mResource = resource; 
        } 
    
        ... 
    
    } 
    
  2. 覆蓋一個ArrayAdapter的getView方法用來設置給予視圖中的數據。

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
        View view; 
        // If the view is already inflated, reuse it. 
        // Else inflate the view 
        if (convertView != null) { 
         view = convertView; 
        } else { 
         //inflate view 
         final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         view = inflater.inflate(mResource, parent, false); 
        } 
    
        TextView ATASAN = (TextView) findViewById(R.id.atasan); 
        ... 
    
    
        //Get data here 
        Map<String, String> item = getItem(position); 
    
        //Set data to the View's e.g. 
        ATASAN.setText(item.get("ATASAN")); 
        ... 
    
        return view; 
    }