2016-07-22 32 views
-1

我想這是我吹在按一下按鈕和保存按鈕我想無論我在列表項進入了我的ArrayList下面是我的代碼列表視圖項獲得價值然後在Android

public class AddNewPerson extends Activity { 

private AtomPayListAdapter adapter; 
Button mButtonSave; 
private List<AtomPayment> items; 
private List<AtomPayment> Finalitems; 
AtomPayment mAtomPayment=new AtomPayment(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_view); 
    mButtonSave=(Button)findViewById(R.id.EnterPays_saveAtomPayment); 
    setupListViewAdapter(); 
    items=new ArrayList<>(); 
    Finalitems=new ArrayList<>(); 
    setupAddPaymentButton(); 
    mButtonSave.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     Log.d("Finalitems",String.valueOf(items.size())); 
      for (int i=0;i<items.size();i++) 
      { 
       Log.d("Name",items.get(i).getName()); 
       Log.d("Value",String.valueOf(items.get(i).getValue())); 
      } 
     } 
    }); 
} 

public void removeAtomPayOnClickHandler(View v) { 
    AtomPayment itemToRemove = (AtomPayment)v.getTag(); 
    adapter.remove(itemToRemove); 
    Finalitems.remove(itemToRemove); 
} 

private void setupListViewAdapter() { 
    adapter = new AtomPayListAdapter(AddNewPerson.this, R.layout.atom_pay_list_item, new ArrayList<AtomPayment>()); 
    ListView atomPaysListView = (ListView)findViewById(R.id.EnterPays_atomPaysList); 
    atomPaysListView.setAdapter(adapter); 
    adapter.insert(new AtomPayment("", 0), 0); 
} 

private void setupAddPaymentButton() { 
    findViewById(R.id.EnterPays_addAtomPayment).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      adapter.insert(new AtomPayment("", 0), 0); 
      Finalitems.add(new AtomPayment("",0)); 
     } 
    }); 
} 

public class AtomPayListAdapter extends ArrayAdapter<AtomPayment> { 

    public String LOG_TAG = AtomPayListAdapter.class.getSimpleName(); 

    private List<AtomPayment> items; 
    private int layoutResourceId; 
    private Context context; 

    public AtomPayListAdapter(Context context, int layoutResourceId, List<AtomPayment> items) { 
     super(context, layoutResourceId, items); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.items = items; 
     Finalitems=items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     final AtomPaymentHolder holder ; 

     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new AtomPaymentHolder(); 
     holder.atomPayment = items.get(position); 
     holder.removePaymentButton = (ImageButton)row.findViewById(R.id.atomPay_removePay); 
     holder.removePaymentButton.setTag(holder.atomPayment); 

     holder.name = (TextView)row.findViewById(R.id.atomPay_name); 
     setNameTextChangeListener(holder); 
     holder.value = (TextView)row.findViewById(R.id.atomPay_value); 
     setValueTextListeners(holder); 

     row.setTag(holder); 

     setupItem(holder); 


     return row; 
    } 

    private void setupItem(AtomPaymentHolder holder) { 
     holder.name.setText(holder.atomPayment.getName()); 
     holder.value.setText(String.valueOf(holder.atomPayment.getValue())); 
    } 

    public class AtomPaymentHolder { 
     AtomPayment atomPayment; 
     TextView name; 
     TextView value; 
     ImageButton removePaymentButton; 
    } 

    private void setNameTextChangeListener(final AtomPaymentHolder holder) { 
     holder.name.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       holder.atomPayment.setName(s.toString()); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 

      @Override 
      public void afterTextChanged(Editable s) { } 
     }); 
    } 

    private void setValueTextListeners(final AtomPaymentHolder holder) { 
     holder.value.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       try{ 
        holder.atomPayment.setValue(Double.parseDouble(s.toString())); 

       }catch (NumberFormatException e) { 
        Log.e(LOG_TAG, "error reading double value: " + s.toString()); 
       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 

      @Override 
      public void afterTextChanged(Editable s) { } 
      }); 
     } 
    } 

}

當我點擊保存按鈕它給我的自定義arraylisy 0項目列表,所以我怎麼能解決這個問題?你的所有建議都是可觀的

+0

嘗試加入'notifyDataSetChanged()'在結束你的'onTextChanged()' –

+0

穆罕默德與Atif:我試着按你的建議,但仍然沒有工作 –

+0

在你保存,你獲取數據的onClick從' items' arrayList。但是您不在該列表中添加任何對象。 –

回答

3

在適配器中創建一個方法,它返回它正在使用的列表。 像:

public ArrayList<AtomPayment> getList() { 
    return items; 
} 

然後在保存按鈕調用此方法的onClick。 像:

List<AtomPayment> paymentList = adapter.getList(); 

並使用這個列表進行進一步的操作。

mButtonSave.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    List<AtomPayment> paymentList = adapter.getList(); 
    Log.d("Finalitems",String.valueOf(paymentList.size())); 
     for (int i=0;i<items.size();i++) 
     { 
      Log.d("Name",paymentList.get(i).getName()); 
      Log.d("Value",String.valueOf(paymentList.get(i).getValue())); 
     } 
    } 
}); 
+0

他試圖訪問沒有值的列表的方式,我建議你甚至提到他需要把'列表 paymentList = adapter.getList()'方法。 :) –

+0

Akshay Bhat:你工作 –