2014-10-09 3 views
0

Я развиваюсь в Android 4.4, и я относительно новичок в разработке Android.ArrayAdapter: ListView change getView аргумент позиции

Вот мой пользовательский адаптер массив использовать в ListView:

class teamsAdapter extends ArrayAdapter<String> { 
Context context; 
String[] teamName; 
String[] teamRecord; 
int teamLogo[]; 

teamsAdapter(Context c, String[] teamName, int[] teamLogo, 
     String[] teamRecord) { 
    super(c, R.layout.activity_teams, R.id.teamList, teamName); 
    this.context = c; 
    this.teamName = teamName; 
    this.teamLogo = teamLogo; 
    this.teamRecord = teamRecord; 
} 

@SuppressLint("ViewHolder") 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    int teamLeft = position;  // 1 
    int teamRight = position + 1; // 2 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = inflater.inflate(R.layout.elements_teams, parent, false); 

    TextView teamNameLeft = (TextView) row.findViewById(R.id.teamNameLeft); 
    ImageView teamLogoLeft = (ImageView) row 
      .findViewById(R.id.teamLogoLeft); 
    TextView teamRecordLeft = (TextView) row 
      .findViewById(R.id.teamRecordLeft); 

    TextView teamNameRight = (TextView) row 
      .findViewById(R.id.teamNameRight); 
    ImageView teamLogoRight = (ImageView) row 
      .findViewById(R.id.teamLogoRight); 
    TextView teamRecordRight = (TextView) row 
      .findViewById(R.id.teamRecordRight); 

    teamNameLeft.setText(teamName[teamLeft]); 
    teamLogoLeft.setImageResource(teamLogo[teamLeft]); 
    teamRecordLeft.setText(teamRecord[teamLeft]); 

    teamNameRight.setText(teamName[teamRight]); 
    teamLogoRight.setImageResource(teamLogo[teamRight]); 
    teamRecordRight.setText(teamRecord[teamRight]); 

    return row; 

} 

} 

Вот что я пытаюсь сделать:

У меня есть 3 статические массивы (2 строки и один Int), которые все три содержат 16 элементов.

Для каждой строки в спискеView я хочу отобразить первые два элемента. Так, например:

ROW 1: teamName[1] teamLogo[1] teamRecord[1] and teamName[2] teamLogo[2] teamRecord[2] 
ROW 2: teamName[3] teamLogo[3] teamRecord[3] and teamName[4] teamLogo[4] teamRecord[4] 

и так далее ...

Есть ли способ, что я могу повторно присвоить значение position после каждой итерации? Итак, после первой итерации, position = position + 2?

Я надеюсь, что это имело смысл. Большое вам спасибо за любую помощь, которую вы можете предложить. Кроме того, дайте мне знать, если мне нужно что-то разъяснить.

-Patrick

+0

* Есть ли способ, что я могу повторно присвоить значение позиции после каждой итерации? * - нет, нет параметра положения, предусмотренного адаптером. В любом случае, вы не захотите этого делать, вместо этого просто сопоставьте полученную позицию с фактическими индексами: 'int realPos = position * 2;'. Затем вы можете использовать 'realPos' и' realPos + 1' непосредственно в массивах. – Luksprog

+0

Я думаю, что вам нужно пересмотреть способ передачи данных в адаптер – karvoynistas

+0

Я пробовал это изначально @Luksprog, однако однажды «позиция> 8» я получаю ошибку arrayOutOfBounds. Любые идеи о том, как с этим бороться? –

ответ

0

Вы не должны делать написать эту логику в GetView внутри адаптера. Обработать данные первого, чтобы он был готов для отображения и передать массив в адаптере, как,

String arrayToAdapter [] = new String[8] ; 

    for(int i = 0,j=0 ; i < arr1.length ; i++,j++){ 

     arrayToAdapter[j] = arr1[i]+ " " + arr2[i] + " " +arr3[i] +" and "+arr1[i+1]+ " " + arr2[i+1] + " " +arr3[i+1] 

    i+=2 ; 


    } 

Затем передайте arrayToAdapter в список вашего адаптера