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 つが表示されます。など。
何か不足していますか?これを行う適切な方法は何ですか?