我有这个特殊的问题,这几天以来一直伴随着我。我使用了搜索,但找不到任何对我的问题有帮助的文章。我想这也是我搜索的一个问题。但是,回到我的问题。
我使用 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 中的按钮或复选框时,我想在特定的视图持有者中进行一些更改,例如使进度条可见或消失。我还不知道如何在我的适配器中获取 View holder 来进行更改。
我希望我能很好地解释它以解决我的问题。