Android 如何从适配器刷新主活动中的视图?

Android 如何从适配器刷新主活动中的视图?,android,android-activity,view,refresh,adapter,Android,Android Activity,View,Refresh,Adapter,我在主活动中有一个图表,在主活动中也有一个回收器视图。自定义适配器用于recyclerview。我在列表项布局中有一个复选框和滑动布局。在滑动布局中有一个删除按钮 当我选中复选框或删除任何项目时,我想重置主要活动的图表 为此,我在主活动中创建了一个方法。并在adapter onCheckedChangeListener中调用此方法,然后单击delete 但我在mBarChart上得到一个空指针异常。即。图表我已经在mBarChart中的setUI方法中进行了实例化,这是在创建活动时调用的 重置方

我在主活动中有一个图表,在主活动中也有一个回收器视图。自定义适配器用于recyclerview。我在列表项布局中有一个复选框和滑动布局。在滑动布局中有一个删除按钮

当我选中复选框或删除任何项目时,我想重置主要活动的图表

为此,我在主活动中创建了一个方法。并在adapter onCheckedChangeListener中调用此方法,然后单击delete

但我在mBarChart上得到一个空指针异常。即。图表我已经在mBarChart中的setUI方法中进行了实例化,这是在创建活动时调用的

重置方法

    public void resetGraph(Context context)
{

    mBarChart.invalidate();

}
在适配器中:

  Context conext;
  MainActivity mainActivity;

  mainActivity = new MainActivity();

  mainActivity.resetGraph(conext);

如何做到这一点?请帮忙。。谢谢..

创建一个接口,用于实现活动、案例中的主要活动以及重写方法和执行操作

//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();
}

创建一个接口,用于实现活动、案例中的主要活动、重写方法和执行操作

//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();
}

在适配器中,不应创建MainActivity的新实例并调用resetGraph()。您应该使用创建适配器的MainActivity实例。将MainActivity实例发送到适配器,
newadapter(this)
并将其保存在适配器中。

在适配器中,不应创建MainActivity的新实例并调用resetGraph()。您应该使用创建适配器的MainActivity实例。将MainActivity实例发送到适配器,
newadapter(this)
并将其保存在adapter中。

您可以从适配器的上下文更改视图,如下所示: 将上下文转换为活动。 使用findviewbyid方法查找所需的视图。 初始化为一个变量

View v = ((Activity)getContext()).findViewById(WHATEVER_VIEW_COMPONENT_YOU_WANT);
根据需要更改变量。 注意。不要忘记使用您想要的视图类型,并将findview方法强制转换为它


如果要调用方法,只需将上下文强制转换为MainActivity并调用它。

您可以从适配器的上下文更改视图,如下所示: 将上下文转换为活动。 使用findviewbyid方法查找所需的视图。 初始化为一个变量

View v = ((Activity)getContext()).findViewById(WHATEVER_VIEW_COMPONENT_YOU_WANT);
根据需要更改变量。 注意。不要忘记使用您想要的视图类型,并将findview方法强制转换为它


如果您想调用一个方法,只需将上下文强制转换为MainActivity并调用它。

在适配器中,以这种方式调用您的resetMethod

((MainActivity)context).resetGraph(context);

在适配器中,以这种方式调用resetMethod

((MainActivity)context).resetGraph(context);

那么
notifyDataSetChanged
我应该如何以及在哪里打电话呢@透视你想刷新适配器的数据吗?我想刷新条形图的数据@NarenderNishadsimple使用NotifyDatasetChange关于
notifyDataSetChanged
我应该如何以及在哪里调用@透视你想刷新适配器的数据吗?我想刷新条形图的数据@NarenderNishadsimple使用NotifiydatasetChange,它给我一个类强制转换异常。它给我一个类强制转换异常。