1

多次元のarrayList.egがあります

arrayList 0 --> {startdate, duration, status}
          1 --> {startdate, duration, status}
          2 --> {startdate, duration, status}

この配列をまとめて、次のアクティビティに送信しました。このアクティビティでは、arrayListの最初のインデックスをアダプターに渡すことができ、データが表示されます(1回ではなく5回表示されますが、別の問題があります)。

私の質問は、どのようにして複数の配列をアダプターに渡すか、アダプターに複数の配列を反復処理させることができるかということです。

次のスニペット配列は多次元配列です。アダプターに渡すためにposition(0)をハードコーディングしました。内部の他の7つのアレイをアダプタに渡すにはどうすればよいですか。

public class GetRota extends Activity {

    private static final String TAG = GetRota.class.getSimpleName();
    ListView listView;
    Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.getrotalayout);

        listView = (ListView)findViewById(R.id.rotalist);
        intent = this.getIntent();
        Bundle bundle = intent.getBundleExtra("rotaArrayBundle");

        @SuppressWarnings("unchecked")
        ArrayList array =  (ArrayList) bundle.get("rotaArray");             
        String record = array.get(0).toString();
        String[] itemsInRecord = record.split(",");
        String[] recordItem = new String[5];

       for(int x = 0; x < itemsInRecord.length; x++){

           Log.e(TAG, "token = " + itemsInRecord[x]);
           recordItem[x] = itemsInRecord[x];
      }

       MySimpleArrayAdapter arrayAdapter = new MySimpleArrayAdapter(this, recordItem);
       listView.setAdapter(arrayAdapter);


    }// end of onCreate


    private class MySimpleArrayAdapter extends ArrayAdapter<String> {
          private final Context context;
          private final String[] values;

          public MySimpleArrayAdapter(Context context, String[] values) {
            super(context, R.layout.rotarowlayout, values);
            this.context = context;
            this.values = values;
          }

          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.rotarowlayout, parent, false);
           TextView startTime = (TextView)rowView.findViewById(R.id.rowstarttime);
           TextView duration = (TextView)rowView.findViewById(R.id.rowduration);
           TextView status = (TextView)rowView.findViewById(R.id.rowstatus);
           TextView name = (TextView)rowView.findViewById(R.id.rowclientname);

           startTime.setText("Start Time: " + values[0]);
           duration.setText("Duration:" + values[1]);
           status.setText("Status:" + values[2]);
           name.setText("Client:" + values[3] + values[4]);



            return rowView;
          }
        }   
    }// end of GetRota
4

2 に答える 2

2

BaseAdapterから拡張して独自のアダプターを作成し、値の配列をアダプターに渡す代わりに、ArrayList自体を渡します。位置の値を使用して、getViewの適切なインデックスにアクセスできます。これはあなたのコードがどのように見えるべきかです

private class MySimpleArrayAdapter extends BaseAdapter {
      private final Context context;
      private final ArrayList array;

      public MySimpleArrayAdapter(Context context, ArrayList array) {
        this.context = context;
        this.array = array;
      }

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

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

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

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        String[] values = array.get(position).toString();
        View rowView;

        if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
            rowView = new View(context);
            // get layout from gridview_item.xml
            rowView = inflater.inflate(R.layout.rotarowlayout, parent, false);
        } else {
            rowView = (View) convertView;
        }


       TextView startTime = (TextView)rowView.findViewById(R.id.rowstarttime);
       TextView duration = (TextView)rowView.findViewById(R.id.rowduration);
       TextView status = (TextView)rowView.findViewById(R.id.rowstatus);
       TextView name = (TextView)rowView.findViewById(R.id.rowclientname);

       startTime.setText("Start Time: " + values[0]);
       duration.setText("Duration:" + values[1]);
       status.setText("Status:" + values[2]);
       name.setText("Client:" + values[3] + values[4]);



        return rowView;
      }
    } 
于 2012-09-20T16:20:24.980 に答える
1

BaseAdapterをサブクラス化し、それを使用してデータを処理する必要があります。 これは、カスタムアダプタの作成に関する記事です。

于 2012-09-20T15:47:05.697 に答える