数日以来、私に続くこの特定の問題があります。検索を使用しましたが、私の問題に役立つ記事の魔女はまだ見つかりませんでした. 私の検索の問題でもあると思います。しかし、私の質問に戻ります。
ResourceCursorAdapter を使用して ListView を埋めます。
私のListViewアイテムは次のようになります..
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/title_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/description_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/download_cb"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/some_bt"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/pdf_ib"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/download_pb"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="10dip" />
</RelativeLayout>
私のアダプター:
private final class ListAdapter extends ResourceCursorAdapter implements
DownloadCallback, OnItemClickListener, OnClickListener {
public ListAdapter(Context context, int layout, Cursor c) {
super(context, layout, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ItemHolder holder = (ItemHolder) view.getTag();
holder.url = cursor.getString(..);
holder.titleTv.setText(cursor.getString(..));
holder.descriptionTv.setText(cursor.getString(..));
...
if(cursor.getInt(..) == 1) {
holder.progress.setVisible(View.GONE);
}
if(cursor.getInt(...) == 1) {
holder.downloadCb.setEnabled(isConnectedToNet);
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
ItemHolder holder = new ItemHolder();
view.setOnClickListener(this);
holder.titleTv = (TextView) view.findViewById(R.id.title_tv);
holder.descriptionTv = (TextView) view.findViewById(R.id.description_tv);
...
holder.downloadCb.setEnabled(isConnectedToNet);
holder.downloadCb.setOnClickListener(this);
holder.downloadCb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
prepare2Download();
DownItem di = new DownItem();
di.url = holder.url; /// <========= to do this
// start async downloader and notify progressbar "holder.downPb"
Download serverTaskObject = new Download();
serverTaskObject.execute(currDownholder.copy());
holder.downPb.setVisibility(View.GONE); // <======== and this.
}
});
holder.pdfIb = (ImageButton) view.findViewById(R.id.pdf_ib);
holder.pdfIb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// start new activity and load website.
openUrl(holder.url); // <============ or this.
}
});
holder.downPb = (ProgressBar) view.findViewById(R.id.pb_law_download);
holder.downPb.setVisibility(View.GONE);
view.setTag(cachedItem);
return view;
}
...
private static class LawItemCache {
TextView titleTv;
TextView descriptionTv;
...
CheckBox downloadCb;
ImageButton pdfIb;
ProgressBar downPb;
String url;
IProgressListener listener;
}
}
私の質問は.. ListView のボタンまたはチェックボックスをクリックすると、プログレスバーを表示したり消したりするなど、特定のビューホルダーにいくつかの変更を加えたいです。アダプター内のビューホルダーを取得して変更を加える方法をまだ理解できませんでした。
問題の要点を理解するのに十分なほど十分に説明したことを願っています。