0

理解できない大きな問題があります。独自のアダプターを使用してカスタム ListView を取得しました。ListView の各行には 2 つの TextView があります。1 つはタイトルで、2 つ目は開始時に非表示です。このアイテムに何か新しいものがあると見えてくるでしょう。

私のアダプターでは、すべての行にタイトルを設定し、2 番目の 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

いくつかの if 条件に基づいて、テキスト ビューの可視性を可視として設定している場合があります。else の部分で可視性を gone に変更してください。うまくいくといいのですが。また、ビュー view= convertview を割り当ててから、 if( convertview = null) を実行しています。このチェックの else 部分でビューを変換するビューを割り当てます。

于 2013-08-31T06:02:50.100 に答える
0

Viewレイアウトで非表示にするには、目的に応じてandroid:visibility属性セットgoneまたは属性を使用します。invisible

プログラムで変更するvisibilityには、メソッドを呼び出しますView.setVisibility(VISIBILITY_YOU_WANT)。クラスには、使用Viewできる定数がいくつかあります。View.GONEView.VISIBLEView.INVISIBLE

ところで、この投稿を読んで理解を深めてListView recyclingください。

于 2013-08-31T00:11:00.003 に答える