2013-01-01 53 views
0

我已經做了線性佈局和添加視圖,但是,視圖出現兩次,我不知道爲什麼會發生。可以修復它嗎? 我有關於適配器的問題,我看了幾次,我發現這裏沒有什麼奇怪的。但是我刪除了addView語句,它不會出現之前添加過的任何視圖。適配器上的Double 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_item

<?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> 
+0

你如何將視圖添加到線性佈局? – Faizan

+0

我想通過在convertView上查找線性佈局將視圖添加到線性佈局中。然後,我在其上添加視圖 – user1494052

回答

0

這聽起來像視圖重新循環可能是這背後的XML。您的適配器負責創建數據集中每個項目的視圖(這就是getView方法的目的)。爲了節約資源,Android會重新循環觀看。這就是getView方法傳遞View的原因。如果傳入的視圖是非空的,那意味着它已經被用來在這個列表中顯示數據。

因此,「清理」視圖是適配器的責任。在你的情況下,這意味着你必須考慮到你可能已經動態地將TextView元素添加到這個視圖(在以前的getView調用中)。未能「清理」視圖意味着每次視圖重新循環時,您的方法都會將另一個TextView添加到佈局。

你的情況,我會建議搜索LinearLayout的答案TextEdit。 (給這個TextEdit一個id,以便你可以通過使用findViewById()來找到它)。如果它已經存在,那麼你不需要添加它。

另一種方法是在XML佈局中包含第二個TextEdit權限。我不清楚爲什麼需要動態添加。

+0

因爲要求是在不同的問題中有不同數量的答案。我需要動態添加它。當然,我可以使用for循環執行此操作,但我想知道是否有辦法通過使用適配器來執行此操作。 – user1494052

+0

如果要爲每行添加不同數量的TextView,仍然可以優雅在getView()中處理。我建議,首先查找並刪除佈局中的所有現有TextView。然後添加您需要的TextViews的數量。查看ViewGroup API:http://developer.android.com/reference/android/view/ViewGroup.html。看看addView/removeView系列的方法。 – EJK