Java 如何在customadapter中调用notificationdatasetchanged()后更新OnStart()中的变量

Java 如何在customadapter中调用notificationdatasetchanged()后更新OnStart()中的变量,java,android,Java,Android,我们想要的是在一个活动中更新textview中的总数。我有一个自定义适配器,在这个活动中调用Arraylist,然后在listview中填充,这个适配器还有一个图像视图,它删除列表项并执行notifydatasetchanged() 这是我的自定义适配器 private ArrayList<DataModel> dataSet; Context mContext; private static class ViewHolder { TextView txtName;

我们想要的是在一个活动中更新textview中的总数。我有一个自定义适配器,在这个活动中调用Arraylist,然后在listview中填充,这个适配器还有一个图像视图,它删除列表项并执行notifydatasetchanged()

这是我的自定义适配器

private ArrayList<DataModel> dataSet;
Context mContext;

private static class ViewHolder {
    TextView txtName;
    TextView txtType;
    Button remove;
}

public CustomAdapterForData(ArrayList<DataModel> data, Context context) {
    super(context, R.layout.fields, data);
    this.dataSet = data;
    this.mContext=context;
}

@Override
public void onClick(View view) {
    int position = (Integer) view.getTag();
    Object object = getItem(position);
    DataModel dataModel = (DataModel) object;

    switch (view.getId())
    {
        case R.id.btnRemove:
            remove(dataModel);
           // dataSet.remove(position);
            //dataSet.remove(position);
            notifyDataSetChanged();
            break;
    }
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    DataModel dataModel = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    ViewHolder viewHolder; // view lookup cache stored in tag

    final View result;

    if (convertView == null) {

        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.fields, parent, false);
        viewHolder.txtName = (TextView) convertView.findViewById(R.id.fieldName);
        viewHolder.txtType = (TextView) convertView.findViewById(R.id.tvPrize);
        viewHolder.remove = (Button) convertView.findViewById(R.id.btnRemove);

        result=convertView;

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result=convertView;
    }

    viewHolder.txtName.setText(dataModel.getFieldName());
    viewHolder.txtType.setText(dataModel.getType());
    viewHolder.remove.setOnClickListener(this);
    viewHolder.remove.setTag(position);

    return convertView;
}
私有ArrayList数据集;
语境;
私有静态类视图持有者{
TextView-txtName;
文本视图txtType;
按钮移除;
}
公共CustomAdapterForData(ArrayList数据、上下文){
super(上下文、R.layout.fields、数据);
this.dataSet=数据;
this.mContext=上下文;
}
@凌驾
公共void onClick(视图){
int position=(整数)view.getTag();
对象=获取项目(位置);
DataModel DataModel=(DataModel)对象;
开关(view.getId())
{
案例R.id.BTN删除:
删除(数据模型);
//数据集。删除(位置);
//数据集。删除(位置);
notifyDataSetChanged();
打破
}
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
DataModel DataModel=getItem(位置);
//检查是否正在重用现有视图,否则会膨胀视图
ViewHolder ViewHolder;//存储在标记中的视图查找缓存
最终查看结果;
if(convertView==null){
viewHolder=新的viewHolder();
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机充气(R.layout.fields,父项,false);
viewHolder.txtName=(TextView)convertView.findViewById(R.id.fieldName);
viewHolder.txtType=(TextView)convertView.findViewById(R.id.tvPrize);
viewHolder.remove=(按钮)convertView.findViewById(R.id.btnRemove);
结果=转换视图;
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
结果=转换视图;
}
viewHolder.txtName.setText(dataModel.getFieldName());
viewHolder.txtType.setText(dataModel.getType());
viewHolder.remove.setOnClickListener(此);
viewHolder.remove.setTag(位置);
返回视图;
}
之后,这是我的onstart()

受保护的void onStart(){
//如果((dataModels.size()!=0)){
ListView ListView=(ListView)findViewById(R.id.ListView);
adapter=新的CustomAdapterForData(数据模型,getApplicationContext());
setAdapter(适配器);
dataModelsnew=数据模型;
TextView tv=(TextView)findViewById(R.id.textViewTotal);
双和=0;
对于(int i=0;i
我想要的是在textview中填充最新的值,它是double的和(ArrayList的一个元素)。请帮助我解决这个问题。
提前谢谢。从列表视图中删除某些内容后要更新的变量,否则该变量工作正常。

您可以使用DataSetObserver检测数据中的任何更改:

final TextView tv = (TextView) findViewById(R.id.textViewTotal);
adapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();

            double sum = 0;
            for (int i = 0 ; i < dataModels.size(); i++){
                sum = sum + dataModels.get(i).getPrize();
            }
            tv.setText("Total : " + String.valueOf(Math.round(sum)*100d/100d));
    }
});
final TextView tv=(TextView)findViewById(R.id.textViewTotal);
registerDataSetObserver(新的DataSetObserver(){
@凌驾
更改后的公共无效(){
super.onChanged();
双和=0;
对于(int i=0;i
final TextView tv = (TextView) findViewById(R.id.textViewTotal);
adapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();

            double sum = 0;
            for (int i = 0 ; i < dataModels.size(); i++){
                sum = sum + dataModels.get(i).getPrize();
            }
            tv.setText("Total : " + String.valueOf(Math.round(sum)*100d/100d));
    }
});