2017-09-26 4 views
-1

私はリストを埋めるために使用されるカスタムリストビューを持っているので、すべてのアイテムには独自のedittextがあります。それをクリックして値を入力した後、ソフトキーボード(キーボードの左下にある小さな矢印)を隠すと、edittextは入力されたテキストを失います。AndroidのカスタムListView - ソフトキーボードが隠れたときにEdittextがクリアされる

なぜ、どのように防止できますか?

ありがとうございます!

アダプタのコード:

public class CompetitorResultWeightListAdapter extends ArrayAdapter<Competitor> { 

    Helper helper = new Helper(getContext()); 

    private DatabaseReference databaseResult; 

    private Activity context; 
    private List<Competitor> competitorList; 
    private WodResult wodResult; 

    public CompetitorResultWeightListAdapter(Activity context, List<Competitor> competitorList) { 
     super(context, R.layout.competitor_result_weight_list_layout, competitorList); 
     this.context = context; 
     this.competitorList = competitorList; 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     helper.logD("in CompetitorResultWeightListAdapter - getView"); 
     databaseResult = FirebaseDatabase.getInstance().getReference("Competitions").child(helper.getsCompetitionID()) 
       .child("Wods").child(helper.getsWodID()).child("Results"); 

     LayoutInflater layoutInflater = context.getLayoutInflater(); 

     convertView = layoutInflater.inflate(R.layout.competitor_result_weight_list_layout, null, true); 

     final ViewHolder viewHolder = new ViewHolder(); 

     TextView tvCompetitorListName = (TextView) convertView.findViewById(R.id.tvCompetitorListName); 
     TextView tvCompetitorListNumber = (TextView) convertView.findViewById(R.id.tvCompetitorListNumber); 
     viewHolder.etWeight = (EditText) convertView.findViewById(R.id.etCompetitorResultWeight); 
     viewHolder.btnSaveResult = (ImageButton) convertView.findViewById(R.id.btnCompetitorResultRepeat); 
     convertView.setTag(viewHolder); 

     Competitor competitor = competitorList.get(position); 

     tvCompetitorListName.setText(competitor.getCompetitorName()); 
     tvCompetitorListNumber.setText("Rajtszám: " + competitor.getCompetitorNumber()); 

     //viewHolder.etWeight.setHint("működik"); 
     //etCompetitorResultWeight.setInputType(InputType.TYPE_NULL); 
     //etCompetitorResultWeight.setTextIsSelectable(true); 

     viewHolder.btnSaveResult.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       viewHolder.etWeight.setHint(viewHolder.etWeight.getText() + " kg"); 
       helper.logD("Edittext text at position " + position + ": " + viewHolder.etWeight.getText().toString().trim()); 
       helper.setsCompetitorID(getItem(position).getCompetitorID()); 
       addWodResult(getItem(position).getCompetitorID(), 
         getItem(position).getCompetitorName(), 
         viewHolder.etWeight.getText().toString().trim()); 
      } 
     }); 

     return convertView; 
    } 

    private void addWodResult(String id, String name, String result) { 
     helper.logD("in addWodResult"); 
     helper.logD("id: " + id + ", name: " + name + ", result: " + result); 

     wodResult = new WodResult(id, name, result); 

     databaseResult.child(helper.getsCompetitorID()).setValue(wodResult).addOnCompleteListener(new OnCompleteListener<Void>() { 
      @Override 
      public void onComplete(@NonNull Task<Void> task) { 
       if (task.isSuccessful()) { 
        helper.makeToast(getContext().getResources().getString(R.string.wod_result_data_saved), helper.toastShort); 
        //viewHolder.btnRepeatResult.setBackgroundColor(Color.GREEN); 
       } else { 
        helper.makeToast(getContext().getResources().getString(R.string.firebase_data_stored_error), helper.toastShort); 
       } 
      } 
     }); 
    } 

    public class ViewHolder { 
     EditText etWeight; 
     ImageButton btnSaveResult; 
    } 
} 
+0

あなたが使用しています'ViewHolder'は、あなたが持っていないようです。 – samirk433

+0

いいえ、私はしていません。私はそれを修正し、あなたにアップデート、ありがとう。 – lpasztor

+0

ビューホルダーと同じです。私は質問を編集し、コードを追加します。これをチェックしてください。 – lpasztor

答えて

0

あなたの活動/フラグメントは、キーボードが消えるたびに再構築されるようですね。 onStart()にいくつかのログステートメントを入れて、そうであるかどうか確認してください。あなたがマニフェストにあなたの活動に何らかのconfigChangesを追加してみてくださいすることができ非常に少なくとも

<activity android:name=".MyActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="@string/app_name"> 

それはあなたが完全にも、すべての値をリセットするリストビュー/アダプターを、再作成している可能性もあります。これが複数回呼び出されたかどうかを調べるために、ListViewが配置されている場所にログステートメントを置いてください。通常、この状態を保存する必要があります。

ます。また、すぐに彼らはタイピングを終えると(好み、シングルトンレベルのオブジェクト)の一時的な方法でユーザーのデータを保存する検討すべきである - あなたがこれを使用することができますが、他の方法があまりにもありますhttps://developer.android.com/reference/android/text/TextWatcher.html

+0

私は(あなたの助言にしたがって)チェックして、キーボードのhideでアダプタのgetviewを数回呼びます。たとえ私がedittextをクリックしても...いいです。 – lpasztor

+0

getViewは、通常はキーボードの背後にあるアイテムが入力されるときに呼び出されます。私は、アダプター全体が再製作されることをより心配しています。 – wblaschko

+0

それは私がやったことです、私は0からアダプタ全体を書き換えましたが、結果は同じです。 – lpasztor

関連する問題