0

我做了线性布局并在上面添加了视图,但是,视图出现了两次,我不知道为什么会这样。有人可以修复它吗?我有关于适配器的问题,我看了几次,我发现这里没有什么奇怪的。但是我删除了 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;
}

以下是executiveui_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为了节省资源,会循环使用views。这就是为什么 getView 方法被传递一个 View 的原因。如果传入的视图是非空的,这意味着它已经被用来显示这个列表中的数据。

因此,适配器负责“清理”视图。在您的情况下,这意味着您必须考虑到您可能已经将 TextView 元素动态添加到此视图中(在之前的 getView 调用中)。未能“清理”您的视图意味着每次重新循环视图时,您的方法都会向布局中添加另一个 TextView。

在您的情况下,我建议在 LinearLayout 中搜索答案 TextEdit。(给这个 TextEdit 一个 id 以便您可以使用 findViewById() 找到它)。如果它已经存在,那么您不需要添加它。

另一种方法是在您的 XML 布局中包含第二个 TextEdit。我不清楚为什么需要动态添加它。

于 2013-01-02T03:00:33.093 回答