2016-04-29 7 views
3

Ich habe eine listview innerhalb der benutzerdefinierten Dialog. In dieser Liste habe ich ein Textfeld und ein Edittext für jede Zeile. Ich benutze editTextWatcher für die Verarbeitung aller edittext Werte auf exakte Position. Bis zu diesem funktioniert gut. Ich habe eine Schaltfläche zum Speichern in diesem Dialogfeld unter der listView. Nach dem Klick auf Speichern möchte ich alle editext Daten zum Server posten. Aber ich bin in der Lage, nur die Werte von edittext zu veröffentlichen, die in der Vorderansicht sind.android Kann nicht alle Editext-Werte mit in Listview in benutzerdefinierten Dialog

Dialog Layout:

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(); 

} 

Individuelle 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 Klasse:

@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()); 
       } 

Antwort

0

Was für ein Wollen Sie zu Ihrem CustomAdapter gehen? Sie sollten ein benutzerdefiniertes Objekt mit der Eigenschaft verwenden, die den Text des editText enthält. So übergeben Sie eine ArrayList myList vom Typ benutzerdefiniertes Objekt an den Adapter. Immer wenn ein Benutzer etwas eingibt, wird die Position des editText in der Listenansicht angezeigt. Anschließend wird das benutzerdefinierte Objekt an dieser Position abgerufen und der editText-Wert in die Objekteigenschaft geschrieben.

So:

myCustomClass Object = myList.get (Position);
object.setValue (edtText.getText());

So haben Sie alle Daten in der ArrayList.

Wenn Sie auf Speichern klicken, können Sie die Array-Liste durchlaufen und die einzelnen Objekteigenschaften prüfen. Wenn Daten vorhanden sind, fügen Sie sie Ihrer productPriceList hinzu.

Hoffe, das hilft!

+0

ok ich werde Sie versuchen, und erzählen über Ausgabe –

0

Endlich habe ich selbst antworten: Ich zählte Listenelemente und legte nur Positionen in Hashmap.

@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; 
     } 
    } 

Und für alle Werte veröffentlichen i folgende verwendet:

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); 
       }