Я развиваюсь в 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
* Есть ли способ, что я могу повторно присвоить значение позиции после каждой итерации? * - нет, нет параметра положения, предусмотренного адаптером. В любом случае, вы не захотите этого делать, вместо этого просто сопоставьте полученную позицию с фактическими индексами: 'int realPos = position * 2;'. Затем вы можете использовать 'realPos' и' realPos + 1' непосредственно в массивах. – Luksprog
Я думаю, что вам нужно пересмотреть способ передачи данных в адаптер – karvoynistas
Я пробовал это изначально @Luksprog, однако однажды «позиция> 8» я получаю ошибку arrayOutOfBounds. Любые идеи о том, как с этим бороться? –