Java 如何将ArrayList发送到BaseAdapter Android

Java 如何将ArrayList发送到BaseAdapter Android,java,android,json,arraylist,baseadapter,Java,Android,Json,Arraylist,Baseadapter,我想先在gridview中显示我的JSON,然后再显示。。我在ListView中显示了我的JSON,它可以正常工作。但在BaseAdapter中,我不知道如何将我放入ArrayList的JSON发送到BaseAdapter中 这是我的源代码: 活动: public class MainActivity extends ListActivity { List AgenList = new ArrayList(); boolean boolStatusKoneksi=

我想先在gridview中显示我的JSON,然后再显示。。我在ListView中显示了我的JSON,它可以正常工作。但在BaseAdapter中,我不知道如何将我放入ArrayList的JSON发送到BaseAdapter中

这是我的源代码:

活动:

    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) {

       }
   }

如您所见,我有一个名为As=AgenList的ArrayList,但我没有将其放入BaseAdapter。

创建一个参数化构造函数,并将数组列表传递到其参数中。所以你的课会是这样的

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;
    }
}
公共类代理适配器扩展了BaseAdapter{
名单;
活动a;
公共代理适配器(活动、列表){
a=活动;
this.list=list;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回列表.size();//返回列表的大小
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;//此处不返回null
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;//返回位置作为itemID
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater布局=getLayoutInflater();
视图=布局。充气(R.layout.list\u项,父项,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);
返回视图;
}
}
试试这个

gridview.setAdapter(new AgenAdapter(this), AgenList);
并在onPostExecute()中使用这一行,而不是onCreate()中

像这样:

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

    }
看一看。它包含基于的适配器的所有实现

  • 使适配器成为的子类,并提供参数化类型。在本例中,您的是
    Map

    公共类ResultAdapter扩展了ArrayAdapter{
    私人国际资源;
    /**
    *@param上下文
    *@param资源
    */
    公共结果适配器(上下文、int资源、ArrayList数据列表){
    超级(上下文、资源、数据列表);
    this.mResource=资源;
    }
    ...
    }
    
  • 重写ArrayAdapter的方法,以用于设置给定给视图的数据

    @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;
    }
    
    @覆盖
    公共视图getView(int位置、视图转换视图、视图组父视图){
    视图;
    //如果视图已充气,请重新使用它。
    //否则,就会扩大视野
    if(convertView!=null){
    视图=转换视图;
    }否则{
    //膨胀视图
    最终LayoutFlater充气器=(LayoutFlater)getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
    视图=充气机。充气(mResource,parent,false);
    }
    TextView ATASAN=(TextView)findViewById(R.id.ATASAN);
    ...
    //在这里获取数据
    地图项目=获取项目(位置);
    //将数据设置为视图的。
    setText(item.get(“ATASAN”);
    ...
    返回视图;
    }
    

  • 如果你想把任何数据发送到你的适配器中,你必须使用同样的技术,使用适配器类的参数化构造函数发送数据,如果是JSONArray,你的方法就像:JSONArray list;活动a;public-AgenAdapter(Activity-Activity,JSONArray-list){this.a=Activity;this.list=list;}进行了一些更改,请参阅上面的代码并查找添加在itsforce-close中的注释,这就是log cat所说的,您的内容必须有一个id属性为“android.R.id.list”的ListView。这是因为您要用
    ListActivity
    扩展类,而不是Activity,所以您的布局xml文件中必须有一个id为
    @android:id/list
    ListView。扩展
    ListActivity
    意味着此活动主要是一个列表,但它旁边可能有一些组件。因此,当您假设一个活动最初是一个列表时,您应该在该活动的布局xml文件中指定一个列表,即主列表。该列表应具有id,
    @android:id/list
    。所以,只需将活动的
    ListView
    的id字段设置为
    @android:id/list
    。您解决了这个问题吗?
    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;
        }
    
        ...
    
    }
    
    @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;
    }