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