2

その前に、JSON を gridview に表示したい.. JSON を ListView に表示したところ、動作しました。しかし、BaseAdapter では、ArrayList に入れた JSON を Base Adapter に送信する方法がわかりません。

これは私のソースコードです:

アクティビティ :

    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 に入れていません。

4

3 に答える 3

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;
    }
}
于 2013-04-04T04:31:25.200 に答える
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;
    }
    
于 2013-10-07T09:22:36.387 に答える
1

これを試して。

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

onCreate() の代わりに onPostExecute() でこの行を使用します

このような:

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

    }
于 2013-04-04T04:56:39.520 に答える