Android 无法更改ImageView的可见性
我有一个使用自定义游标适配器填充ListView的ListViewAndroid 无法更改ImageView的可见性,android,android-imageview,Android,Android Imageview,我有一个使用自定义游标适配器填充ListView的ListView row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" an
row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:gravity="center_vertical"
android:ellipsize="marquee"
android:textSize="24dp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/artist"
android:singleLine="true"
android:ellipsize="marquee"
android:textSize="14dp" />
</LinearLayout>
<ImageView
android:id="@+id/currentplaying"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="1dip"
android:src="@android:drawable/ic_media_play"
android:contentDescription="@string/now_playing"
android:visibility="gone" />
</LinearLayout>
提前谢谢
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.yourlayout, null);
holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
convertView.setTag(holder);
}
else {
holder=(ViewHolder)convertView.getTag();
}
if(position==0) {
holder.imgViewLogo.setVisiblity(View.VISIBLE);
}
return convertView;
}
编辑:
我让它工作了。我用它来启动ListView活动
intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID)));
startActivity(intent);
intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID)));
startActivity(intent);
在ListView活动中
currentplayingid = getIntent().getExtras().getInt("id");
currentplayingid = getIntent().getExtras().getInt("id");
然后我在bindview()中添加了这个
也许您应该在适配器的getView()
中执行此操作
编辑:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// codes...
if (position == 0)
{
holder.imgViewLogo.setVisibility(ImageView.VISIBLE);
}
else
{
holder.imgViewLogo.setVisibility(ImageView.GONE);
}
// codes...
}
你必须这样做
iv.setVisibility(View.VISIBLE);
请按如下方式尝试以下代码
private class ViewHolder
{
ImageView imgViewLogo;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.yourlayout, null);
holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
if(position==0)
{
holder.imgViewLogo.setVisiblity(View.VISIBLE);
}
return convertView;
}
它对我有用…它可能会帮助你。我遇到了类似的问题,一些行会出现一些小部件,而其他行则不会。这些问题是由于回收造成的。我不确定这是否是你的问题,但无论如何你都应该处理好。诀窍是为每一行设置可见性;而不仅仅是要显示/消失的行
因此:
否则,您将假设对于0以外的位置,可见性消失,但视图回收可能不是这样。顺便说一下,我是在bindView中做这项工作的。不确定这在技术上是否正确。如果它在某个时间起作用,那么可能我可以帮助您。无论何时移动listview,它都会重新创建所有视图。在这种情况下,它永远不会保存视图的最后状态。所以,您需要做的是保存每个imageview的状态,并在getView()中进行相应设置。
这里有一个小代码供您帮助:我将创建一个布尔arraylist
私有ArrayList imageview_visible=null
然后,我将在构造函数中将所有imageview的状态设置为false:
for (int i=0; i < no_of_elements.size(); i++) {
imageview_visible.add(i, false);
}
}
无论何时取消隐藏或隐藏视图,只要将其保存到imageview\u visible中即可。设置(true或false)将保存所有imageview的状态,并相应地设置每个图像视图
LayoutInflater inflater = this.getLayoutInflater();
View rowView = inflater.inflate(R.layout.row, null, true);
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying);
iv.setVisibility(ImageView.VISIBLE);
我让它工作了。我用它来启动列表视图活动
intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID)));
startActivity(intent);
intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID)));
startActivity(intent);
在listview活动中
currentplayingid = getIntent().getExtras().getInt("id");
currentplayingid = getIntent().getExtras().getInt("id");
然后我在bindview()中添加了这个
我也有同样的问题。。。我用非标准的解决方案解决了问题,但为我工作
v.setImageResource(R.color.transparent);
从android导入R
import android.R;
都iv.setVisibility(视图可见)代码>和iv.setVisibility(ImageView.VISIBLE)代码>是正确的,但最好使用视图
而不是图像视图
,因为可见
和消失
是在视图
类中定义的
在if
中,您可以更改两种可见性(可见
或消失
)。比如:
if(?)
iv.setVisibility(View.VISIBLE);
else iv.setVisibility(View.GONE);
可以使用setVisibility(int)隐藏或显示视图。
使用iv.setVisibility(View.VISIBLE)代码>使用View.VISIBLE而不是ImageView.VISIBLE不起作用。图像按钮的作用是什么?在getView()中使用它时遇到的问题是,每次滚动时,屏幕上都会看到每一行的ImageView。您所说的“每一行”是什么意思?我很抱歉。我没有在getView()中尝试它。实际上我在bindView()中尝试过。你能给我一个在getView()中工作的例子吗?我如何在getView()中获得imageview的对象?就像你提供的代码中所做的一样;首先对行布局进行充气,然后通过findViewById()
获得ImageView
,然后检查position==0,如果是,将ImageView
设置为可见,如果不是,将其设置为不可见。我不希望在单击列表项时发生这种情况。我想在显示listview时使imageview显示一行。很抱歉,我错误地理解了您的要求。检查更新的答案。我的行中有两个文本视图。检查上面的my row.xml。它们不再显示任何文本。当我向下滚动列表时,其他一些行的imageview是可见的,我猜这是因为Joel Skrepnek在前面的回复中提到了视图循环;或iv.1(1);不工作?如果符合您的需要,请尝试使用View.INVISIBLE而不是View.GONE。并尝试在代码中而不是在xml文件中执行此操作。未定义视图对象。
if(?)
iv.setVisibility(View.VISIBLE);
else iv.setVisibility(View.GONE);