1

アプリケーションに次のクラスがあります。

public class Player implements Parcelable {
    private String name;
    private int playerColor;
    private int[] scores;
    ...
}

関連するリストビューに表示するスコア配列の要素を ArrayAdapter の getView メソッドに伝えるにはどうすればよいですか? アクティビティからの情報に基づいて、ListView に player.name フィールドと、player.scores 配列の特定の要素を表示したいと考えています。

public class PlayerGameAdapter extends ArrayAdapter<Player> {
private ArrayList<Player> entries;
private Activity activity;

 public PlayerGameAdapter(Activity a, int viewResourceId, ArrayList<Player> entries) {
    super(a, viewResourceId, entries);
    this.entries = entries;
    this.activity = a;
}

public static class ViewHolder {
    public Button buttonName;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder;
    if (v == null) {
        LayoutInflater vi =
                (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.listview_row_player_game, null);
        holder = new ViewHolder();
        holder.buttonName = (Button) v.findViewById(R.id.buttonGamePlayerListName);
        v.setTag(holder);
    } else
        holder = (ViewHolder) v.getTag();

    final MiniGolfPlayer player = entries.get(position);
    if (player != null) {
        holder.buttonName.setText(player.getName() + " - " + player.scores[ELEMENT]);
    }
    return v;
}

}

4

1 に答える 1

1

Player クラスに位置変数を追加します。

public class Player implements Parcelable {
    private String name;
    private int playerColor;
    private int[] scores;
    private int position; // also add the get and set methods
}

アクティビティでは、表示するスコアの位置を各プレーヤーごとに個別に変更できます。

((Player)entries.get(0)).setPosition(AnyValueYouWant);
((Player)entries.get(1)).setPosition(AnotherValue);

次に、リストビューを更新するようにアダプタに通知します。

PlayerGameAdapter.notifyDataSetChanged();

それはあなたのために働きますか。またはあなたは何か他のものを期待しています。

于 2013-09-26T20:01:09.147 に答える