类和活动之间的基本函数调用

时间:2016-08-26 16:06:00

标签: java android

我已经在Stackoverflow上阅读了很多帖子,说要在这样的参数中发送上下文或活动或AppCompatActivity这样的事情:

public class MainActivity extends AppCompatActivity {
    public SecondClass secondClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        secondClass = new SecondClass(this);    
    }

    public void updateView () {
        Log.d("CS", "MainActivity updateView");
    }
}

public class SecondClass {
    public Context mContext;
    public SecondClass (Context context) {
        this.mContext = context;
        this.mContext.updateView();
    }
}

但那给了我错误:

  

"找不到符号方法updateView"

我做错了什么?

3 个答案:

答案 0 :(得分:0)

因为Context类没有名为updateView()的方法。 你能做的是......

Naiive方法: 在活动中,将自己作为MainActivity实例传递,然后您可以随时使用该实例调用updateView方法。

推荐方法:使用相同的概念,但不要将自己作为已知的类实例传递给自己,而是将自己作为UpdateViewListener传递给自己(这是一个你要做的界面),你基本上需要实现一个接口,我们称之为UpdateViewListener并在UpdateViewListener构造函数中将自己作为Second Class传递给自己。 此接口应该有一个名为updateView()的方法,因此实现此接口的任何类都需要为此方法提供一个实现,因此,在Second Class中,您将不再关心listener的内容。 1}},只要它实现UpdateViewListener并且有一个名为updateView()的方法,就将接口视为契约。

此模式称为Observer Pattern

有关详细信息,请参阅here

答案 1 :(得分:0)

不知道你的意图是什么,但是如果你正在调用MainActivity方法,那么你需要一个MainActivity(或者更好的是你应该将这些方法提取到接口)

public class SecondClass {
    public MainActivity mActivity;
    public SecondClass (MainActivity activity) {
        this.mActivity = activity;
        this.mActivity.updateView();
    }
}

答案 2 :(得分:0)

因为,您正在将appCompatActivity类转发到Context。没有这种方法的上下文。如果你想做这个方法调用你必须使转换LIKE ((MainActivity)context).updateView()否则你可以使接口像艾哈迈德阿什拉夫说。或者像Ashraf所说的那样将MainActivity实例传递给构造函数。