Android 无法更改ImageView的可见性

Android 无法更改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

我有一个使用自定义游标适配器填充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"
    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);