滚动ListView时,Invisible TextView开始可见

时间:2013-08-30 23:55:06

标签: android listview textview

我有一个我不明白的大问题。我有自己的适配器自定义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>

2 个答案:

答案 0 :(得分:0)

要使View在其布局中不可见,请将android:visibility属性设置为goneinvisible,具体取决于您要执行的操作。

以编程方式,要更改visibility,请调用View.setVisibility(VISIBILITY_YOU_WANT)方法。您可以使用View课程中的一些常量:View.GONEView.VISIBLEView.INVISIBLE

顺便说一句,请阅读this post以更好地了解ListView recycling

答案 1 :(得分:0)

有时,您会根据if条件将文本视图的可见性设置为可见。确保将可见性更改为其他部分。我希望这项工作。您还要分配视图view = convertview,然后执行if(convertview = null)。指定视图以在此检查的else部分中转换视图。