0

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

2 回答 2

0

要使其View布局中不可见,请使用android:visibility属性设置为goneinvisible取决于您想要做什么。

以编程方式,要更改visibility,请调用该View.setVisibility(VISIBILITY_YOU_WANT)方法。类中有一些常量View可以使用:View.GONE, View.VISIBLE, View.INVISIBLE.

顺便说一句,阅读这篇文章以更好地理解ListView recycling.

于 2013-08-31T00:11:00.003 回答
0

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

于 2013-08-31T06:02:50.100 回答