我有一个我不明白的大问题。我有自己的适配器自定义ListView。 ListView中的每一行都有两个TextView - 一个是标题,第二个在开始时是不可见的。当此项目中有新内容时,它将会显示。
在我的适配器中,我为每一行设置了标题,并将第二个TextView设置为应该可见。当我运行我的应用程序时没关系,但是当我向下滚动列表时,几乎每一行都会将隐形TextView更改为可见!
我不知道为什么,但我认为这与convertView
有关。有谁能告诉我发生了什么事?
我的适配器:
public class MyListAdapter extends BaseAdapter {
@SuppressWarnings("unused")
private Activity activity;
private ArrayList<String> titles;
private LayoutInflater inflater;
public MyListAdapter (Activity activity, ArrayList<String> titles) {
this.activity = activity;
this.titles = titles;
inflater = (LayoutInflater)activity.getLayoutInflater();
}
public int getCount() {
return titles.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.wpis_list_row, null);
}
TextView title = (TextView)vi.findViewById(R.id.movie_title);
title.setText(titles.get(position));
String name = titles.get(position);
if (name.equals("Name 1") || name.equals("Name 2")
|| name.equals("Name 3")) {
TextView news = (TextView)vi.findViewById(R.id.new_sounds);
news.setVisible(0);
}
return vi;
}
}
和我的单行布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:orientation="horizontal"
android:padding="5dip" >
<TextView
android:id="@+id/movie_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="9"
android:layout_marginLeft="@dimen/list_margin"
android:text="@string/entry"
android:textColor="#FFFFFF"
android:textSize="22sp" />
<TextView
android:id="@+id/new_sounds"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textColor="#8C1717"
android:textSize="13sp"
android:text="@string/news"
android:visibility="invisible" />
</LinearLayout>
答案 0 :(得分:0)
要使View
在其布局中不可见,请将android:visibility
属性设置为gone
或invisible
,具体取决于您要执行的操作。
以编程方式,要更改visibility
,请调用View.setVisibility(VISIBILITY_YOU_WANT)
方法。您可以使用View
课程中的一些常量:View.GONE
,View.VISIBLE
,View.INVISIBLE
。
顺便说一句,请阅读this post以更好地了解ListView
recycling
。
答案 1 :(得分:0)
有时,您会根据if条件将文本视图的可见性设置为可见。确保将可见性更改为其他部分。我希望这项工作。您还要分配视图view = convertview,然后执行if(convertview = null)。指定视图以在此检查的else部分中转换视图。