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

时间:2016-05-02 12:14:54

标签: android android-activity view refresh adapter

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

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

为此,我在主要活动中创建了一个方法。并在适配器onCheckedChangeListener中调用此方法,并单击删除。

但是我在mBarChart上得到一个空指针异常。即图形。我已经在setUI方法中在mBarChart中实例化,并且在活动的onCreate中调用它。

resetMethod

    public void resetGraph(Context context)
{

    mBarChart.invalidate();

}
适配器中的

  Context conext;
  MainActivity mainActivity;

  mainActivity = new MainActivity();

  mainActivity.resetGraph(conext);

怎么做?请帮忙......谢谢..

4 个答案:

答案 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并调用它。