0

ArrayList を別のクラスに送信する方法を考えるのに本当に混乱しました。= AgenList という名前の ArrayList があり、それを BaseAdapter を拡張する別のクラスに送信したいのですが、私の問題を解決するのを手伝ってくれる人はいますか? これは私のソースコードです: 1. MainActivity.java

public class MainActivity extends Activity {    
List AgenList = new ArrayList();
boolean boolStatusKoneksi=true;
private ProgressDialog Dialog;
protected Context applicationContext;



@Override
public void onCreate(Bundle savedInstanceState){
    new AgenAsyncTask().execute();
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.mainmenu);
    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new TesAdapter(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://www.abc.com/xyz.php");
              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 arg) {Dialog.dismiss();}

ご覧のとおり、TesAdapter.java に送信したい JSONArray を含む AgenList という名前の arrayList があるので、これは TesAdapter.java です。

public class TesAdapter extends BaseAdapter{
private LayoutInflater layout;

public TesAdapter(MainActivity context) {
layout = LayoutInflater.from(context);
List AgenList = new ArrayList();
}

@Override
public int getCount() {
    return (Integer) null;
}

@Override
public Object getItem(int position) {
    return 0;
}

        @Override
        public long getItemId(int position) {
            return position;
        }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        convertView= layout.inflate(R.layout.list_item,parent,false);
        holder = new ViewHolder();

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

    }

}

 class ViewHolder{
    TextView ATASAN;
    TextView NAMA_AGEN;
    TextView KODE_AGEN;
    TextView NO_AAJI;
    TextView JENIS;

}

誰かがこの問題を解決するのを手伝ってくれることを願っています、ありがとう

4

5 に答える 5

0

私によると。最も簡単な方法は、TesAdapter から呼び出すことができる MainActivity クラスで getAgentList メソッドを公開することですもちろん、他の方法もあります。

于 2013-04-08T04:32:06.320 に答える
0

ArrayList を別のクラスに送信する

MainActivityArrayList を からに送信するために TesAdapter コンストラクターを使用しTesAdapterます。アクティビティの onCreate メソッドの代わりに、onPostExecuteアダプターを追加するメソッドを使用する必要があります。GridView

TesAdapter コンストラクターを次のように変更します。

public class TesAdapter extends BaseAdapter{
 private LayoutInflater layout;
 List AgenList;
 Context context;
 public TesAdapter(Context context,List AgenList) {
 layout = LayoutInflater.from(context);
 this.AgenList = AgenList;
}
....

onPostExecuteアダプターを GridView に次のように追加します。

@Override
protected void onPostExecute(String arg) {
 GridView gridview = (GridView)MainActivity.this. findViewById(R.id.gridview);
 gridview.setAdapter(new TesAdapter(MainActivity.this,AgenList));
 Dialog.dismiss();
}
于 2013-04-08T04:32:07.270 に答える
0

最も簡単な方法は、クラスArrayListにプロパティを追加することです。BaseAdapter

次に、 a をインスタンス化するクラスで、コンストラクターにnew BaseAdapteryour を渡します。ArrayList

public class Foo {
    public void createBaseAdapter() {
        ArrayList arList = new ArrayList();
        BaseAdapter ba = new BaseAdapter(arList);
    }
}

public class BaseAdapter {
    ArrayList arList;
    public BaseAdapter(ArrayList arList) {
        this.arList = arList;
    }
}

あなたの場合

public TesAdapter(MainActivity context, ArrayList list) {
    layout = LayoutInflater.from(context);
    this.AgenList = list; //Declared as a class property
}
于 2013-04-08T04:27:14.557 に答える
0

public static モディファイヤの使用。

public static List AgenList = new ArrayList();

他のクラスで :MainActivity.AgenListを使用してAgenList

于 2013-04-08T04:30:02.200 に答える
0

You can pass that arraylist through the construct or of the other class. Create a class member arraylist in other class. Then do this in constructor this.agentlist=passedAgentList

于 2013-04-08T04:34:52.100 に答える