我在主要活动中有一个图表,我在主要活动中有一个回收者视图。自定义适配器用于recyclerview。我在列表项布局中有一个复选框和滑动布局。在滑动布局中有一个删除按钮。
当我选中复选框或删除任何项目时,我想重置主要活动的图表。
为此,我在主要活动中创建了一个方法。并在适配器onCheckedChangeListener中调用此方法,并单击删除。
但是我在mBarChart上得到一个空指针异常。即图形。我已经在setUI方法中在mBarChart中实例化,并且在活动的onCreate中调用它。
resetMethod
public void resetGraph(Context context)
{
mBarChart.invalidate();
}
适配器中的:
Context conext;
MainActivity mainActivity;
mainActivity = new MainActivity();
mainActivity.resetGraph(conext);
怎么做?请帮忙......谢谢..
答案 0 :(得分:2)
在适配器中以这种方式调用resetMethod
((MainActivity)context).resetGraph(context);
答案 1 :(得分:1)
创建一个接口,在您的案例中实现Activity,Main活动并覆盖方法并执行操作。
//Interface
public interface OnRefreshViewListner{
public void refreshView();
}
//Main Activity
MainActivity extends Activity implements OnRefreshViewListner
{
//Other methods
@Override
public void refreshView(){
// write refresh code here
}
}
//Initialize Interface in adapter constructor
public class YourAdapter extends BaseAdapter {
private OnRefreshViewListner mRefreshListner;
public YourAdapter (Context context) {
mRefreshListner = (OnRefreshViewListner)context;
}
//call MainActivity method
mRefreshListner.refreshView();
}
答案 2 :(得分:0)
在适配器中,您不应创建MainActivity的新实例并调用resetGraph()。您应该使用创建适配器的MainActivity实例。将MainActivity实例发送到适配器new Adapter(this)
并将其保存在适配器中。
答案 3 :(得分:0)
您可以从适配器的上下文更改视图,如下所示: 将上下文转换为活动。 使用findviewbyid方法查找所需的视图。 将其初始化为变量。
View v = ((Activity)getContext()).findViewById(WHATEVER_VIEW_COMPONENT_YOU_WANT);
根据需要更改变量。 注意。不要忘记使用您想要的视图类型并将findview方法强制转换为它。
如果你想调用一个方法,只需将上下文转换为MainActivity并调用它。