Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改适配器类中的数据后更新活动的textview_Android_Listview_Android Activity_Android Listview - Fatal编程技术网

Android 更改适配器类中的数据后更新活动的textview

Android 更改适配器类中的数据后更新活动的textview,android,listview,android-activity,android-listview,Android,Listview,Android Activity,Android Listview,我的仪表板活动中有textview txtQuantity。我为自定义适配器编写了单独的类,该类将包含已销售的产品 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); list = (ListView) findViewById(R.id.listSold

我的仪表板活动中有textview txtQuantity。我为自定义适配器编写了单独的类,该类将包含已销售的产品

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard);

    list = (ListView) findViewById(R.id.listSoldItems);

    txtAmount = (TextView) findViewById(R.id.txtAmount);
    txtItems = (TextView) findViewById(R.id.txtItems);

    // init listview
    adapter = new Sold_item_adaptor(Dashboard.this, soldItemsList);
    list.setAdapter(adapter);
我可以使用适配器从列表中删除项目。用于删除项的代码是在适配器类中编写的

public View getView(final int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.list_row_sold_item, null);

    TextView txtListItem = (TextView) vi.findViewById(R.id.txtListItem);
    final TextView txtQuantity = (TextView) vi.findViewById(R.id.txtQuantity);
    ImageView imgCancel = (ImageView) vi.findViewById(R.id.imgCancel);

    HashMap<String, String> mapData = new HashMap<String, String>();
    mapData = data.get(position);

    txtListItem.setText(mapData.get("product"));
    txtQuantity.setText(mapData.get("qty"));

    imgCancel.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            doButtonOneClickActions(txtQuantity, position);
        }
    });

    return vi;
}

private void doButtonOneClickActions(TextView txtQuantity, int rowNumber) {
    // Do the actions for Button one in row rowNumber (starts at zero)
    data.remove(rowNumber);
    notifyDataSetChanged();

}
public View getView(最终int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.list\u row\u Sald\u item,空);
TextView txtListItem=(TextView)vi.findViewById(R.id.txtListItem);
最终文本视图txtQuantity=(文本视图)vi.findViewById(R.id.txtQuantity);
ImageView imgCancel=(ImageView)vi.findViewById(R.id.imgCancel);
HashMap mapData=新的HashMap();
mapData=data.get(位置);
txtListItem.setText(mapData.get(“产品”));
txtQuantity.setText(mapData.get(“数量”));
imgCancel.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
DOBUTTONONECLICK动作(TXT数量、位置);
}
});
返回vi;
}
私有void doButtonOneClickActions(TextView txtQuantity,int rowNumber){
//对rowNumber行中的按钮1执行操作(从零开始)
数据删除(行编号);
notifyDataSetChanged();
}

在我的仪表板活动中,我维护所选项目数、总金额。现在,如果我从listview中删除项,来自自定义适配器的代码将删除该项,但我如何才能获得仪表板活动的通知/信号以更新数量。

据我所知,您对在DoButtonneClickActions()之后更新适配器外部的UI感兴趣

最简单的方法是使用

这里可以找到一些例子


如果您不想这样做,可以通过提供一个简单的回调来创建回调

为此,请在适配器中编写一个简单的接口

public interface OnDataChangeListener{
    public void onDataChanged(int size);
}
并为侦听器添加一个setter(也在适配器中)

现在向适配器中的以下块添加其他代码

OnDataChangeListener mOnDataChangeListener;
public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener){
    mOnDataChangeListener = onDataChangeListener;
}
private void doButtonOneClickActions(TextView txtQuantity, int rowNumber) {
    ...
    if(mOnDataChangeListener != null){
        mOnDataChangeListener.onDataChanged(data.size());
    }
}
在仪表板活动中,您需要注册侦听器

protected void onCreate(Bundle savedInstanceState) {
    ...
    adapter.setOnDataChangeListener(new Sold_item_adaptor.OnDataChangeListener(){
        public void onDataChanged(int size){
            //do whatever here
        }
    });
}

就这样;)

在适配器类中重写notifyDataSetChanged()。。。做你想做的事

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
   // Your code to nofify
}
其主要思想是:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);

list = (ListView) findViewById(R.id.listSoldItems);

txtAmount = (TextView) findViewById(R.id.txtAmount);
txtItems = (TextView) findViewById(R.id.txtItems);

// init listview
adapter = new Sold_item_adaptor(Dashboard.this, soldItemsList,txtAmount);
list.setAdapter(adapter);
在适配器中:

public class MyAdapter extends ArrayAdapter<SoldItemsList > {

private Context context;
private mTotalQty;
private TextView mTxtAmountAdapter;


 public OfferAdapter(Context context, int resource,SoldItemsList object,TextView txtAmount ) {
    super(context, resource, objects);
    this.context = context;
    this.mTxtAmountAdapter = txtAmount;


}

//...

imgCancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    doButtonOneClickActions(position);
    // update totalAmount
     mTxtAmountAdapter.setText(Integer.valueOf(totalAmount).toString()));

}
});

imgPlus.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    qtyClickAction(position);
     // update totalQty
    mTxtAmountAdapter.setText(Integer.valueOf(totalAmount).toString()));

}
});
公共类MyAdapter扩展了ArrayAdapter{
私人语境;
私人总数量;
私有文本视图mTxtAmountAdapter;
公开报价器(上下文上下文、int资源、SoldItemsList对象、TextView txtAmount){
超级(上下文、资源、对象);
this.context=上下文;
this.mTxtAmountAdapter=txtmount;
}
//...
imgCancel.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
DOBUTTONONECLICK动作(位置);
//更新总金额
mTxtAmountAdapter.setText(Integer.valueOf(totalAmount.toString());
}
});
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
QT周期动作(位置);
//更新总数量
mTxtAmountAdapter.setText(Integer.valueOf(totalAmount.toString());
}
});

将数量作为数据的一部分保留在arraylist中(属于listview u更新)从技术上看,这似乎非常正确,但变量mOnDataChangeListener经常会变为null。为什么会发生这种情况?@fivos也许您在错误的位置查找错误?上面的代码不会自行将变量设置为null。如果您自己找不到错误,请创建一个新问题。也许sombody或我可以帮助您。