所以,我有一個帶有自定義BaseAdapter的TextView和ListView的活動。本次活動是這樣的:從ListView項目中的EditText值更新活動的TextView
正如你可以看到,該列表的每一個項目是一個自定義佈局的基本思路是:每一個在它的數字的EditText從變化中,「總」的TextView時間活動(也就是每個產品的價格總和)也必須更新。
我想它必須以某種方式從Adapter類完成,但我不知道該怎麼做。
我的動態文件看起來像這樣(它從服務器產品的數據通過「GetCollectionProducts」的AsyncTask,在這裏我設置適配器):
public class ProductAisleActivity extends AppCompatActivity implements View.OnClickListener{
ListView productList;
Button participate;
ImageButton search;
EditText searchET;
TextView productsTotal;
Product[] colProducts;
RelativeLayout collectionHeader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_aisle);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
/* ...
Irrelevant code to this question
*/
productsTotal = (TextView) findViewById(R.id.products_aisle_total);
productsTotal.setText(
getResources().getString(
R.string.productsTotal,
String.valueOf(0.00)
)
);
productList = (ListView) findViewById(R.id.products_aisle_list);
new GetCollectionProducts().execute();
}
private class GetCollectionProducts extends AsyncTask<Void,Void,JSONArray>{
@Override
protected JSONArray doInBackground(Void... voids) {
/* Irrelevant code to this question */
}
@Override
protected void onPostExecute(JSONArray jsonArray) {
/* Irrelevant code to this question */
productList.setAdapter(
new CollectionProductsAdapter(
ProductAisleActivity.this,
colProducts
)
);
}
}
我的適配器文件,如下所示:
public class CollectionProductsAdapter extends BaseAdapter {
Context context;
ProductAisleActivity.Product[] data;
private static LayoutInflater inflater = null;
public CollectionProductsAdapter(Context context, ProductAisleActivity.Product[] data) {
this.context = context;
this.data = data;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int i) {
return data[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
if (v == null) {
v = inflater.inflate(R.layout.product_row_layout, null);
}
ProductAisleActivity.Product product = data[i];
/* ...
Irrelevant code to this question
*/
EditText productQuantity = (EditText) v.findViewById(R.id.productQuantity);
productQuantity.setText("0");
return v;
}
}
我被困在這一點上,任何幫助將不勝感激。
有幾種方法。您可以使用TextWatcher來檢查EditText中的內容何時被修改並將其推送到Observer或其他東西。 – zgc7009
@ zgc7009你能給我舉個例子嗎?謝謝! –