我有一个使用自定义cursoradapter的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>
如您所见,ImageView的可见性消失了。我想成功 对于一个特定行可见。这是我试过的代码,但事实并非如此 工作...
View view = getListView().getAdapter().getView(0, null, null);
ImageView iv = (ImageView)view.findViewById(R.id.currentplaying);
iv.setVisibility(ImageView.VISIBLE);
提前致谢。
@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);
在ListView活动中,
currentplayingid = getIntent().getExtras().getInt("id");
然后我在bindview()
ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying);
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID));
if (id == SongsListActivity.this.currentplayingid)
imgview.setVisibility(View.VISIBLE);
else
imgview.setVisibility(View.GONE);
答案 0 :(得分:2)
我得到了它的工作。我用它来启动列表视图活动。
intent.putExtra("id", c.getInt(c.getColumnIndex(DatabaseHelper._ID)));
startActivity(intent);
在listview活动中,
currentplayingid = getIntent().getExtras().getInt("id");
然后我在bindview()
中添加了这个ImageView imgview = (ImageView)view.findViewById(R.id.currentplaying);
int id = c.getInt(c.getColumnIndex(DatabaseHelper._ID));
if ( id == SongsListActivity.this.currentplayingid )
imgview.setVisibility(View.VISIBLE);
else
imgview.setVisibility(View.GONE);
答案 1 :(得分:1)
也许您应该在适配器的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...
}
答案 2 :(得分:0)
你必须这样做
iv.setVisibility(View.VISIBLE);
答案 3 :(得分:0)
请尝试以下代码,
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;
}
它对我有用......它可能对你有帮助。
答案 4 :(得分:0)
我遇到了类似的问题,其中一些小部件会出现在某些行中而不会出现在其他行中。问题是由于视图回收。我不确定这是否是你的问题,但无论如何你应该处理它。诀窍是为每一行设置可见性;而不仅仅是你想要出现/消失的行。
所以:
if (position == 0)
{
iv.setVisibility(ImageView.VISIBLE);
}
else
{
iv.setVisibility(ImageView.GONE);
}
否则,您假设对于0以外的位置,可见性为GONE,但视图回收可能不是这种情况。顺便说一句,我在bindView中做这个工作。不确定这在技术上是否正确。
答案 5 :(得分:0)
如果它正在工作一段时间,那么我可以帮助你。无论何时移动listview,它都会再次重新创建所有视图,在这种情况下它永远不会保存最后的视图状态。所以你需要做的是保存你的每个imageview的状态,并在getView()中你必须相应地设置。我发布了一个答案,它可能会帮助你。 这是一个小代码供您使用:我将创建一个布尔arraylist。
private ArrayList imageview_visible = null;
然后我将在构造函数中将所有imageview的状态设置为false:
for (int i=0; i < no_of_elements.size(); i++) {
imageview_visible.add(i, false);
}
在你的getView中编写这段代码:
public View getView(int position,View convertView,ViewGroup parent) { //写你的代码
if (imageview_visible.get(position) == true)
{
//SET YOUR IMAGE VIEW AS VISIBLE
} else {
// SET IMAGEVIEW AS GONE
}
}
每当您取消隐藏或隐藏视图时,只需将其保存到imageview_visible.set(true或false),这将保存所有imageview的状态并相应地设置每个图像视图
答案 6 :(得分:0)
使用LayoutInflater获取视图对象
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);
答案 7 :(得分:0)
我有同样的问题......我用非标准解决方案解决了,但为我工作......
v.setImageResource(R.color.transparent);
从android
导入R.import android.R;
答案 8 :(得分:0)
iv.setVisibility(View.VISIBLE);
和iv.setVisibility(ImageView.VISIBLE);
都是正确的,但最好使用View
代替ImageView
,因为VISIBLE
&amp; GONE
在View
类中定义。
您最常更改VISIBLE
中的可见性(GONE
或if
)。像:
if(?)
iv.setVisibility(View.VISIBLE);
else iv.setVisibility(View.GONE);
答案 9 :(得分:0)
您可以使用setVisibility(int)隐藏或显示视图。
使用iv.setVisibility(View.VISIBLE);