所以,我有一个带有自定义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你能给我举个例子吗?谢谢! –