0

線形レイアウトを作成してビューを追加しましたが、ビューが2回表示されます。なぜそれが起こるのかわかりません。誰か修正できますか?? アダプターに問題があり、しばらく調べてみましたが、ここで奇妙なことは見つかりませんでした。しかし、addView のステートメントを削除すると、以前に追加したビューは表示されません。

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if(convertView == null)
    {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    //  inflater.inflate(R.layout. parent,false);
        convertView = inflater.inflate(R.layout.exerciseui_item,parent,false);

    }
    Exercise question = exercises.get(position);
    TextView question_view = (TextView) convertView.findViewById(R.id.exercise_question);
    String question_test = question.getOrder() + " " + question.getText()  ;
    question_view.setText(question_test);
    int answer_num = question.getAnswer().size();

    LinearLayout linear = (LinearLayout) convertView.findViewById(R.id.exercise_answer);
        ExerciseAnswer answer = question.getAnswer().get(0);
        int answer_order = answer.getOrder();
        String answer_text = answer.getText();
        String answer_final = answer_order + " " + answer_text;
        TextView answer_view = new TextView(linear.getContext());
        answer_view.setPadding(20, 5, 5, 5);
        answer_view.setTextSize(30);
        answer_view.setText(answer_final);
        linear.addView(answer_view);


    return convertView;
}

以下は、executeui_item の 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="vertical"
android:id="@+id/exercise_answer" >

<TextView
    android:id="@+id/exercise_question"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:textSize="13dp"
    ></TextView>
</LinearLayout>
4

1 に答える 1

0

ビューの再利用がこの背後にあるようです。アダプターは、データ セット内の各アイテムのビューを作成する役割を果たします (これが getView メソッドの目的です)。Android は、リソースを節約するために、ビューを再利用します。そのため、getView メソッドに View が渡されます。渡されたビューが null でない場合は、このリストにデータを表示するために既に使用されていることを意味します。

したがって、ビューを「クリーンアップ」するのはアダプターの役割です。あなたの場合、これは、(以前の getView 呼び出しで) このビューに TextView 要素を既に動的に追加している可能性があるという事実を考慮する必要があることを意味します。ビューを「クリーンアップ」しないと、ビューが再利用されるたびに、メソッドがさらに別の TextView をレイアウトに追加することになります。

あなたの場合、LinearLayoutでTextEditの答えを検索することをお勧めします。(この TextEdit に ID を付けて、findViewById() を使用して検索できるようにします)。すでに存在する場合は、追加する必要はありません。

もう 1 つの方法は、2 つ目の TextEdit を XML レイアウトに含めることです。これを動的に追加する必要がある理由は明確ではありません。

于 2013-01-02T03:00:33.093 に答える