1

ListView の管理に使用するカスタム ArrayAdapter があります。

public class FilesAdapter extends ArrayAdapter<PutioFileLayout> {

    Context context;
    int layoutResourceId;
    PutioFileLayout data[] = null;

    public FilesAdapter(Context context, int layoutResourceId, PutioFileLayout[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        FileHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new FileHolder();
            holder.textName = (TextView) row.findViewById(R.id.text_fileName);
            holder.textDescription = (TextView) row.findViewById(R.id.text_fileDesc);
            holder.imgIcon = (ImageView) row.findViewById(R.id.img_fileIcon);

            row.setTag(holder);
        } else {
            holder = (FileHolder) row.getTag();
        }

        PutioFileLayout file = data[position];
        holder.textName.setText(file.name);
        holder.textDescription.setText(file.description);
        holder.imgIcon.setImageResource(file.icon);

        return row;
    }

    static class FileHolder {
        TextView textName;
        TextView textDescription;
        ImageView imgIcon;
    }
}

そして、私のフラグメントでは、これらを の前に宣言しますonCreate:

private PutioFileLayout[] fileData;
private FilesAdapter adapter;

次に、onCreateユーザーのプレースホルダーとして、これで初期化します。

    fileData = new PutioFileLayout[] {
            new PutioFileLayout("Loading...", "Your files will appear shortly.", R.drawable.ic_launcher, false)
    };

そして、アダプターを初期化します。

    adapter = new FilesAdapter(getSherlockActivity(), R.layout.file,
            fileData);
    listview.setAdapter(adapter);

後で、いくつかのネットワーク関連の処理を行った後、アダプターのデータを更新します。これは私が間違っているかもしれないと思うところです。

PutioFileLayout[] files = blah blah, stuff. I've confirmed in debug that this array is correct and has the correct number of values.
adapter.data = files;
                adapter.notifyDataSetChanged();

すべての結果は、配列内の最初の項目を示す ListView であり、他には何もありません。

初期化時に 2 つ目の Loading... 行などを追加すると、最初の 2 つが表示されます。など。

何か不足していますか?これを行う適切な方法は何ですか?

4

1 に答える 1

3

更新ArrayAdapterする場合はArrayList、代わりにArray. を使用している場合Array、更新できない内部的にArrayAdapter使用されるためです。List

コンストラクタを書き直してください

public FilesAdapter(Context context, int layoutResourceId, List<PutioFileLayout> list) {
    super(context, layoutResourceId, list);
    ...
}

getView()を呼び出してアイテムを取得しgetItem(position)ます。

アダプタの使用を初期化するにはadapter = new FilesAdapter(getSherlockActivity(), R.layout.file, new ArrayList<PutioFileLayout>());

そして、アダプタの使用を満たすためにadapter.add(new PutioFileLayout(...));

于 2012-07-23T22:29:46.223 に答える