2017-05-01 8 views
0

ListViewのEditTextでユーザーの入力が6より大きい場合は、ListViewの同じ行にCheckBoxを追加します。ただし、最初の行に追加し続けます。私はこれが単純なものであると思われるように感じますが、他の投稿を検索した後ではわかりません。onTextChanged、生成されたCheckBoxがListViewの同じ行に追加されています

もう1つの質問です。 ListViewの各項目からデータを取得する最善の方法は、ArrayListに格納することですか? TextView/Spinner/CheckBoxのすべての値を取得するという点で何か他のものがありますか?

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

      final ComboView comboView; 
      if(view == null){ 
       comboView = new ComboView(); 
       LayoutInflater layoutInflater = InputCombos.this.getLayoutInflater(); 
       view = layoutInflater.inflate(R.layout.input_combos_view, null); 
       comboView.combo = (TextView) view.findViewById(R.id.combo); 
       comboView.numOrbs = (TextView) view.findViewById(R.id.numOrbs); 
       comboView.comboEdit = (EditText) view.findViewById(R.id.comboEdit); 
       comboView.comboElement = (Spinner) view.findViewById(R.id.comboElement); 

       ArrayAdapter<String> comboElements = new ArrayAdapter<>(InputCombos.this, android.R.layout.simple_spinner_item, elements); 
       comboElements.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       comboView.comboElement.setAdapter(comboElements); 

       comboView.pos = i; 

       comboView.comboEdit.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

        } 

        @Override 
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
         if(charSequence.length() != 0){ 
          int orbCount = Integer.parseInt((charSequence).toString()); 
          if(orbCount >= 6){ 
           LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout); 
           comboView.row = new CheckBox(InputCombos.this); 
           //CheckBox row = new CheckBox(InputCombos.this); 
           comboView.row.setText("Row"); 
           comboViewLayout.addView(comboView.row); 
          } 
          comboData.set(comboView.pos,orbCount); 
          System.out.println(comboData); 
         } 
        } 

        @Override 
        public void afterTextChanged(Editable editable) { 

        } 
       }); 

       view.setTag(comboView); 
      } else { 
       comboView = (ComboView) view.getTag(); 
      } 

      System.out.println(combosNum); 
      comboView.combo.setText(combosNum.get(i)); 

      return view; 
     } 

答えて

0

レイアウトidは(あなたが同じレイアウトで複数の行を持っている場合、それがそうであるように)複数回検出された場合、Androidはそれが見つけることができることを最初に出現したが返されますが:行1

LinearLayout comboViewLayout = (LinearLayout) findViewById(R.id.comboViewLayout); 

は、代わりにあなただけ

LinearLayout comboViewLayout = (LinearLayout) view.findViewById(R.id.comboViewLayout); 
+0

ああ現在の行でそれを探す必要があるかもしれないしそれを試してみても、私は確かにやったが、それはそれであった場合、最終的なようにビューを設定することについての何かが、わからないと述べました良いことかどうか。私はまずそれを試してみたはずです...ありがとう。 –

+0

変数をfinalに設定するのは悪い考えではありません。あなたの場合、おそらくあなたはビューの価値を割り当てる新しい最終変数を導入する必要があります。あなたのケースでは、ビュー自身をfinalに設定することはできません。 – SimonSays

関連する問題