2016-04-29 42 views
3

我在自定義對話框中有一個listview。在該列表中,我有一個文本字段和一個Edittext每行。我正在使用editTextWatcher處理確切位置上的所有edittext值。直到這個工作正常。我在listView下的那個對話框上有一個保存按鈕。點擊保存後,我想將全部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類:

@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類型的自定義對象給適配器。 無論何時用戶輸入東西,您都可以在列表視圖中獲得editText的位置,然後在該位置獲取自定義對象,並在該對象的屬性中寫入editText值。

像這樣:

MyCustomClass對象= myList.get(位置);
object.setValue(edtText.getText());

像這樣,你將擁有arrayList中的所有數據。

在保存按鈕單擊時,您可以遍歷arrayList並檢查單個對象屬性,如果它有數據將其添加到您的productPriceList。

希望這會有所幫助!

+0

確定我會盡量告訴你輸出 –

0

最後我得到的答案我自己: 我計算列表項目,並只在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; 
     } 
    } 

和用於發佈,我用以下的所有值:

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); 
       } 
相關問題