2017-02-19 88 views
0

我正在使用自定義列表適配器的列表視圖。顯示鍵盤之前顯示空數據的Android listview?

當我點擊「+」按鈕時,會動態添加一個列表項。每個列表項目包含4個EditTexts。

第一個列表項目顯示正確的數據,但其他項目的最右邊的EditTexts爲空。

這是問題

issue image

你可以看到最後一次編輯的文本顯示,除了第一個列表項的空數據。顯示鍵盤後,此問題即告解決。

打開軟鍵盤

Solved image

我嘗試使用adapter.notifyDataSetChanged()list.invalidateViews(),但現在的工作之後。

我該如何解決這個問題?

的onCreate()

Vector v; 
CreateExerciseAdapter adapter; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_workout); 

     v = new 
     adapter = new CreateExerciseAdapter(v,this); 

     txtName = (EditText)findViewById(R.id.editTextName); 
     list = (ListView)findViewById(R.id.listView2); 

     //listview footer button (Add new button) 
     LayoutInflater inflater = LayoutInflater.from(this); 
     View inflate = inflater.inflate(R.layout.create_exercise_item, null); 
     ImageButton btnAddNew = (ImageButton) inflate.findViewById(R.id.imageButtonAddNew); 
     list.addFooterView(inflate); 

     btnAddNew.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       View item = LayoutInflater.from(view.getContext()) 
         .inflate(R.layout.create_new_exercise_item, null); 
       v.add(item); 
       adapter.notifyDataSetChanged(); 
      } 
     }); 
     list.setAdapter(adapter); 
    } 

謝謝:-)

更新

適配器

public class CreateWorkoutListAdapter extends BaseAdapter { 
    Context context; 
    Vector vector; 
    LayoutInflater inflater = null; 
    FontManager fm; 

    public CreateWorkoutListAdapter(Context context, Vector vector){ 
     this.context = context; 
     this.vector = vector; 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public int getCount() { 
     return vector.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return vector.elementAt(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View view, ViewGroup viewGroup) { 

     view = inflater.inflate(R.layout.create_new_exercise_item, null); 

     final EditText txtName = (EditText)view.findViewById(R.id.editTextExerciseName); 
     final EditText txtReps = (EditText)view.findViewById(R.id.editTextReps); 
     final EditText txtMin = (EditText)view.findViewById(R.id.editTextMin); 
     final EditText txtSec = (EditText)view.findViewById(R.id.editTextSecond); 


     return view; 
    } 
} 
+0

什麼是 「V」?請張貼適配器代碼。 –

+0

@NIkaKurdadze:謝謝。我更新了問題 – Malinda

+0

你能否更詳細地談論這個問題?是否顯示添加的項目? 「這個問題在顯示鍵盤後解決了」,你到底意味着什麼?「? –

回答

0

次變更:

list = (ListView)findViewById(R.id.yourlistviewid); 

insted的的:

list = (ListView)findViewById(R.id. 
+0

對不起,這是一個錯誤。我編輯了問題。對不起 – Malinda

+0

好的........... –

+0

請填寫您的答案。 –

0

請用以下內容替換您的getView:

@Override 
    public View getView(final int position, View view, ViewGroup viewGroup) { 

     view = inflater.inflate(R.layout.create_new_exercise_item, viewGroup, false); 

     final EditText txtName = (EditText)view.findViewById(R.id.editTextExerciseName); 
     final EditText txtReps = (EditText)view.findViewById(R.id.editTextReps); 
     final EditText txtMin = (EditText)view.findViewById(R.id.editTextMin); 
     final EditText txtSec = (EditText)view.findViewById(R.id.editTextSecond); 


     return view; 
    } 
+0

謝謝尼卡。我會嘗試 – Malinda

+0

我試過你的答案,但沒有奏效。然後我發現了這個問題。我從我的設備中卸載apk文件並運行該項目。它運行良好。我認爲問題在於這是新的Android Studio的運行過程。非常感謝。 – Malinda

+0

我認爲這個答案應該被標記? – Malinda