Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 适配器上的双添加视图_Android_Adapter - Fatal编程技术网

Android 适配器上的双添加视图

Android 适配器上的双添加视图,android,adapter,Android,Adapter,我已经做了线性布局并添加了视图,但是,视图出现了两次,我不知道为什么会发生。有人能修复它吗?? 我有关于适配器的问题,我看了几次,我发现这里没有奇怪的地方。但是我删除了addView的语句,它不会出现我以前添加的任何视图 public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if(convertView == null)

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

这似乎是视图重新循环的原因。适配器负责创建数据集中每个项的视图(这是getView方法的目的)。为了节省资源,Android将重新循环视图。这就是为什么getView方法被传递一个视图。如果传入的视图为非null,则表示它已用于显示此列表中的数据

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

在您的情况下,我建议您在LinearLayout中搜索答案TextEdit。(为该文本指定一个id,以便您可以使用findViewById()找到它)。如果它已经存在,则不需要添加它


另一种方法是在XML布局中包含第二个文本编辑权限。我不清楚为什么需要动态添加视图。

如何将视图添加到线性布局中?我想通过在视图上查找线性布局来将视图添加到线性布局中。然后,我添加了关于它的观点,因为要求是在不同的问题中有不同数量的答案。我需要动态添加它。当然,我可以使用for循环来实现这一点,但我想知道是否有一种方法可以通过使用Adapter来实现这一点,如果您要向每行添加不同数量的文本视图,那么仍然可以在getView()中优雅地处理。我建议,首先查找并删除布局中所有现有的文本视图。然后添加所需的文本视图数。请参阅ViewGroup API:。查看addView/removeView方法系列。