2017-02-19 23 views
0

私はカスタムリストアダプターでリストビューを使用しています。キーボードが表示されるまで、Androidのリストビューに空のデータが表示されますか?

「+」ボタンをクリックすると、リスト項目が動的に追加されます。すべてのリスト項目には4つのEditTextが含まれています。

最初のリスト項目は正しいデータを示していますが、他の項目の右端のEditTextは空です。

これは、あなたが最後の編集テキストが最初のリスト項目を除いて、空のデータを示す見ることができる問題

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

何?アダプターコードも記入してください。 –

+0

@NIkaKurdadze:ありがとう。私は質問を更新しました – Malinda

+0

あなたはもっと詳しく問題について話すことができますか?追加された項目は表示されていますか? 「この問題は、キーボードが表示された後に解決されます」という意味ではどういう意味ですか? –

答えて

0

の変更:の

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

Insted:

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

申し訳ありませんが、間違いです。私は質問を編集しました。申し訳ありません – Malinda

+0

大丈夫です........... –

+0

答えを記入してください。 –

0

以下でごgetViewメソッドを交換してください: "V" である

@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

関連する問題