0

은 내가 multidimentional arrayList.eg가arrayAdapter가 둘 이상의 배열의 내용을 표시하는 방법은 무엇입니까?

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

내가이 배열을 번들하고 다음 활동에 보낸 있습니다. 이 액티비티에서는 arrayList의 첫 번째 인덱스를 어댑터에 전달할 수 있으며 데이터를 표시합니다 (한 번에 5 번 표시되었지만 다른 문제가 표시됨).

제 질문은 어떻게 하나 이상의 배열을 어댑터에 전달할 수 있습니까? 아니면 하나 이상의 배열을 반복하도록 어댑터를 가져올 수 있습니까?

다음 스 니펫 배열은 다차원 배열입니다. 어댑터에 전달할 위치 (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 

답변

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; 
     } 
    } 
1

BaseAdapter를 하위 클래스에 추가하고 데이터로 원하는 것을 수행해야합니다. Here is an article 사용자 지정 어댑터 만들기에 대해 설명합니다.

+0

감사합니다. 빠른 모양을 보였지만 나중에 오늘 밤에 진행할 것입니다. 다차원 배열을 다루지 만 잘 모르겠다. – turtleboy

+0

목록 어댑터로 원하는 데이터 구조를 전환하는 방법을 보여 준다. 그 점에서 당신에게 어떻게 표시되는지. – CaseyB

관련 문제