[英]Communication between BaseAdapter and Fragment
首先,我知道这里已经回答了这个问题: fragment和baseadapter之间的Android通信 ,我尝试实现它,但是由于这是我第一次使用接口,并且没有得到其背后的逻辑,因此无法正常工作。 我的问题是我想设置此片段的TextView的值
Fragment.java
public class FragmentCart extends Fragment {
private TextView totalTxt;
private TextView totalItems;
private ListView itemList;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_cart, container, false);
totalTxt = (TextView)view.findViewById(R.id.totalTxt);
totalItems = (TextView)view.findViewById(R.id.totalItems);
itemList = (ListView)view.findViewById(R.id.itemList);
itemList.setAdapter(MainActivity.cart);
return view;
}
}
这个适配器的值(double totalCost)
Adapter.java
public class Cart extends BaseAdapter {
private double totalCost = 0;
public getView() {
Item item.....
totalCost += item.getPrice();
}
}
逻辑是,当我将项目添加到购物车(适配器)时,片段中的TextView也将更新。 如何使用界面执行此操作?
要直接回答您的问题:
在Adapter.java中,声明一个新接口,我们将其称为TotalCostUpdater
:
public interface TotalCostUpdater {
void onTotalCostUpdated(int totalCost);
}
然后,仍然在适配器中,您需要一个通过构造函数初始化实现此接口的字段。 更新值后,可以从此处调用onTotalCostUpdated(totalCost)
。
您的Adapter.java类将如下所示:
public class Cart extends BaseAdapter
{
public interface TotalCostUpdater {
void onTotalCostUpdated(int totalCost);
}
private double totalCost = 0;
private TotalCostUpdater costUpdater;
public Cart(TotalCostUpdater costUpdater) {
this.costUpdater = costUpdater;
}
public getView()
{
Item item.....
totalCost += item.getPrice();
costUpdater.onTotalCostUpdated(totalCost);
}
}
然后,您需要实现TotalCostUpdater
,并在FragmentCart.java中重写其onTotalCostUpdated
方法:
public class FragmentCart extends Fragment implements Cart.TotalCostUpdater
{
private TextView totalTxt;
private TextView totalItems;
private ListView itemList;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_cart, container, false);
totalTxt = (TextView)view.findViewById(R.id.totalTxt);
totalItems = (TextView)view.findViewById(R.id.totalItems);
itemList = (ListView)view.findViewById(R.id.itemList);
itemList.setAdapter(MainActivity.cart);
return view;
}
@Override
public void onTotalCostUpdated(int totalCost) {
totalTxt.setText(totalCost);
}
}
实例化适配器时(有时必须编写一个new Cart()
),您需要传入FragmentCart
,它现在正在实现Cart
的构造函数中预期的接口:
new Cart(fragmentCart);
这应该可以解决问题。 这是您应该考虑的其他一些事项:
CartData
类保存实际的购物车值。 MainActivity.cart
是全局的。 您应该直接在Fragment类中实例化它 findViewById
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.