我想要的是隐藏ImageView
中特定项目的ListView
,因此我将此代码放到适配器的getView
方法中:
for (int i = 0; i < mImageModelList.size(); i++) {
if (((SNSPostModel) mComparableObjectList.get(position)).getAccountId().equals(mImageModelList.get(i).getSnsPostId())) {
Log.e("PATH", mImageModelList.get(i).getPath());
Log.e("ID", mImageModelList.get(i).getSnsPostId());
if (mImageModelList.get(i).getPath().equals(null) || mImageModelList.get(i).getPath().equals("null")) {
//Log.e("REMOVE", "REMOVE");
//mPostHolder.mPostedImage.setVisibility(View.GONE);
} else {
mPostHolder.mPostedImage.setVisibility(View.VISIBLE);
Bitmap bmp = BitmapFactory.decodeFile(mImageModelList.get(i).getPath());
mPostHolder.mPostedImage.setImageBitmap(bmp);
}
}
}
}
这是Logcat:
08-19 02:36:18.725: E/ID(13070): 929043207145744_951230201593711
08-19 02:36:18.729: E/PATH(13070): null
08-19 02:36:18.729: E/ID(13070): 929043207145744_951230201593711
08-19 02:36:18.737: E/PATH(13070): /mnt/sdcard/lifelog/929043207145744_951223071594424.png
08-19 02:36:18.737: E/ID(13070): 929043207145744_951223071594424
08-19 02:36:18.737: E/PATH(13070): /mnt/sdcard/lifelog/929043207145744_951223071594424.png
08-19 02:36:18.737: E/ID(13070): 929043207145744_951223071594424
正如您所看到的,我不明白为什么ImageModelList
中的对象被调用了两次。请告诉我如何解决这个问题。谢谢!
答案 0 :(得分:0)
方法getView()
不是您想要的地方。这是Adapter
占据ListView
中每个位置并决定如何填充它以及是否需要为此地点生成新View
的地方。
相反,你可以使用`ListView.getChaildAt(int position)来为你提供你想要的视图,或者如果你不知道你可以使用的位置:
YourCustomAdapter yourCustomAdapter = ((YourCustomAdapter)listView.getAdapter());
for (int i = 0; i < listView.getChildCount(); i++){
View v = listView.getChildAt(i);
//put your logic check here, use the yourCustomAdapter reference to read it data like mImageModelList. You need that all data will define as public
}
答案 1 :(得分:0)
这是你在getView方法中必须做的。 你永远不会在getView()中运行for循环。
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
mPostHolder= new ViewHolder();
view = inflater.inflate(R.layout.snapshort_item_view, null);
// Locate the ImageView in listview_item.xml
mPostHolder.mPostedImage= (ImageView) view
.findViewById(R.id.snapshortImage);
view.setTag(mPostHolder);
} else {
mPostHolder= (ViewHolder) view.getTag();
}
// Here you need to check your condition for hiding the imageview or not. Replace "i" with "position" which is a parameter fot getView() method.
if (mImageModelList.get(position).getPath().equals(null)
|| mImageModelList.get(position).getPath().equals("null")) {
// Log.e("REMOVE", "REMOVE");
// mPostHolder.mPostedImage.setVisibility(View.GONE);
} else {
mPostHolder.mPostedImage.setVisibility(View.VISIBLE);
Bitmap bmp = BitmapFactory.decodeFile(mImageModelList.get(i)
.getPath());
mPostHolder.mPostedImage.setImageBitmap(bmp);
}
return view;
}