2016-04-29 11 views
3

私はlistviewをカスタムダイアログ内に持っています。そのリストでは、私は1つのテキストフィールドと1つの行ごとにEdittextを持っています。正確な位置のすべてのedittext値を扱うために私はeditTextWatcherを使用しています。これまでの罰金まで。私はそのダイアログにlistViewの下に1つの保存ボタンを持っています。保存をクリックした後、すべてのeditextデータをサーバーに送信します。しかし、私はedittextの値が正面から見えるだけ投稿することができます。androidカスタムダイアログ内のリストビューですべてのeditext値を取得できません

ダイアログレイアウト:

private void showDialog(){ 

    dialog1 = new Dialog(this); 
    final Dialog tradDialog = new Dialog(this, android.R.style.Theme_Light_NoTitleBar); 
    //tradDialog.setContentView(R.layout.trad_dialog_layout); 
    View view = getLayoutInflater().inflate(R.layout.trad_dialog_layout_individual, null); 
    //tradDialog.setContentView(R.layout.trad_dialog_layout); 
    tradDialog.setCanceledOnTouchOutside(false); 
    // holder.mWatcher = new MutableWatcher(); 
    lv = (ListView) view.findViewById(R.id.productsListView); 
    RelativeLayout saveBtnLayout = (RelativeLayout) view.findViewById(R.id.saveBtnLayout); 
    // Change MyActivity.this and myListOfItems to your own values 
    clad = new CustomListAdapterDialog(SolutionActivity.this, individual_productChoosedAr); 

    lv.setAdapter(clad); 
    clad.notifyDataSetChanged(); 
    //save button for posting all edittext values to server 
    saveBtnLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      for (int i = 0; i < lv.getChildCount(); i++) { 
        v = lv.getChildAt(i); 
        etPrice = (EditText) v.findViewById(R.id.etPrice); 
        ProductPrice = etPrice.getText().toString(); 
        if(ProductPrice.equals("")){ 
         ProductPrice = "NULL"; 
        } 
        productPriceAr.add(ProductPrice); 
       } 
      Toast toast = Toast.makeText(getApplicationContext(),"Please wait...",Toast.LENGTH_LONG); 
      toast.show(); 
      SendIndividualDatatoServer sendIndividualData = new SendIndividualDatatoServer(); 
      sendIndividualData.execute(); 
     } 
    }); 
    //lv.setOnItemClickListener(........); 

    dialog1.setContentView(view); 
    dialog1.show(); 

} 

カスタムAdatper:

public View getView(final int position, View convertView, ViewGroup parent) { 

     final int pos = position ; 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.custom_layout_individual, null); 
      holder = new ViewHolder(); 
      holder.product = (TextView) convertView.findViewById(R.id.tvProductName); 
      holder.price = (EditText) convertView.findViewById((R.id.etPrice)); 
      holder.mWatcher = new MutableWatcher(); 
      holder.price.addTextChangedListener(holder.mWatcher); 
      etPrice = (EditText) convertView.findViewById(R.id.etPrice); 
      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.mWatcher.setActive(false); 
     holder.price.setText(myList.get(position), TextView.BufferType.EDITABLE); 
     holder.mWatcher.setPosition(position); 
     holder.mWatcher.setActive(true); 
     holder.product.setText(listData.get(position).P_Name); 
     productIds = listData.get(position).Category_Id; 
     return convertView; 
    } 

TextWatcherクラス:何A

@Override 
    public void afterTextChanged(final Editable s) { 
//   SolutionActivity.this.runOnUiThread(new Runnable() { 
//    @Override 
//    public void run() { 
       if (mActive) { 
        myList.put(mPosition, s.toString()); 
        System.out.print(s.toString()); 
       } 

答えて

0

あなたはあなたのCustomAdapterに渡しますか? editTextのテキストを含むプロパティを持つカスタムオブジェクトを使用する必要があります。 したがって、カスタムオブジェクト型のArrayList myListをアダプタに渡します。 ユーザーが何かを入力すると、listview内のeditTextの位置を取得し、その位置でカスタムオブジェクトを取得し、オブジェクトのプロパティにeditText値を書き込みます。このよう

MyCustomClassオブジェクト= myList.get(位置)。
object.setValue(edtText.getText());

このようにすると、arrayListのすべてのデータが取得されます。

saveボタンをクリックすると、arrayListをループして、個々のオブジェクトプロパティをチェックすることができます(データにproductPriceListにデータが追加されている場合)。

希望すると便利です。

+0

私がしようとすると、出力をご紹介します:

@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { int mCount = lv.getCount(); if(mIndCount==1){ for(int i = 0; i<mCount;i++){ myList.put(i,""); } mIndCount=2; } } 

、私は次のように使用すべての値を投稿するため

0

最後に私は自分自身に答えました: 私はリスト項目を数え、ハッシュマップでポジションだけを入れました。

がOK
for (int i = 0; i < myList.size(); i++) { 
    if(myList.get(i).toString().equals("")){ 
        ProductPrice = "NULL"; 
       }else { 
        ProductPrice = myList.get(i).toString(); 
       } 

        productPriceAr.add(ProductPrice); 
       } 
関連する問題