【问题标题】:Android: Calling a method which is not in an Activity by clicking a ButtonAndroid:通过单击按钮调用不在活动中的方法
【发布时间】:2017-01-25 19:02:18
【问题描述】:

我的 Android Studio 项目中有 2 个 Java 类和 2 个 XML 布局文件。第一类是我的 MainActivity 类和第二类显示的地图的容器。布局工作正常,但我在第二类的 XML 文件中有一个按钮,它设置为在单击时调用第二类中的方法。但是按钮只能调用我的 MainActivity 类中的方法。我怎样才能让 Button 调用另一个方法,比如说我的 MainActivity 类之外的另一个类的方法?

非常感谢您的帮助。

提前致谢。

/编辑:

我现在可以调用其他方法,但每次我尝试从 MainActivity 类访问某些内容时,应用程序都会崩溃。代码示例:

public void test() { 
  TextView tv = (TextView) getActivity().findViewById(R.id.textView); 
  tv.setText("2"); 
} 

这是从 MainActivity 类调用的第二个类的方法。调用工作正常,但我无法从布局中访问任何内容。如果有帮助的类是一个 Fragment,其中包含一个 MapView:

public class MapsFragment extends Fragment {

【问题讨论】:

  • 添加代码以显示您所写的内容。
  • 如果第二种方法是在Activity类中,你可能想错了
  • 但它不是一个activity类,它是一个fragment,包含在我的MainActivity中。

标签: java android button android-activity methods


【解决方案1】:

在 Mainactivity 中创建第二类的对象。 然后使用该对象调用第二类的函数。

已编辑 -

我看到您不需要创建像 fragment_obj.updateTextView(); 这样的函数。我将所有视图设置为类级别对象,并且能够直接更新 textview。

fragmentObj.textViewLanguage.setText("Your Text Here!");

注意:如果您需要执行多个操作,那么拥有一个功能是可行的方法。

使用函数 - 您可以通过使用找到 Fragment 的实例,

对于支持库,

YourFragment fragment_obj = (YourFragment)getSupportFragmentManager().
                          findFragmentById(R.id.fragment_id);

其他

YourFragment fragment_obj = (YourFragment)getFragmentManager().
                                         findFragmentById(R.id.fragment_id); 

然后在 Fragment 中创建一个方法来更新您的 TextView 并使用 fragment_obj 调用该方法,

fragment_obj.updateTextView();

【讨论】:

  • 我试过了,但它只能部分解决我的问题。我可以调用其他方法,但每次尝试从 MainActivity 类访问某些内容时,应用程序都会崩溃。代码示例: public void test() { TextView tv = (TextView) getActivity().findViewById(R.id.textView); tv.setText("2");这是从 MainActivity 类中调用的第二个类的方法。调用工作正常,但我无法从布局中访问任何内容。如果它有助于该类是 MapsFragment: public class MapsFragment extends Fragment {
  • 不要从活动中更改片段的 UI。但是可以做到这一点,但您也可以从片段本身设置 textView 的值,如果这是您想要实现的。
  • 我想通过一个Button来改变UI,但是Button只能调用activity中的方法,而不能调用fragment中的方法。那是我的问题。
  • 检查编辑的答案。我绝对应该解决你的问题。
  • 它对我有一点帮助,但不幸的是它并没有完全解决我的问题。我仍然遇到的问题是,我无法使用片段中的任何资源。我想完成一个比编辑 TextView 更复杂的目标,但如果我什至无法访问该 TextView,我就无法访问任何其他资源,如 Textfields 或其他东西。问题是,我通过 ID 获取 TextView 的行(见上文),此时应用程序崩溃,但它通常应该将 TextView 放在 tv 变量中,并让我通过 tv.setText("") 对其进行编辑。
【解决方案2】:

您不必通过 xml android:onClick 将 xml 按钮连接到方法,您可以通过代码轻松完成:

Button b = (Button) findViewById(R.id.my_button);
b.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // call the method
    }
});

【讨论】:

    【解决方案3】:

    进入你的XML代码并添加这个属性android:onClick="OnClickMe",然后进入你想要访问另一个方法的类,并添加控制按钮点击的方法。

    首先在Oncreate中声明你的Button

    Button b = (Button) findViewById(R.id.my_button);
    

    然后创建一个方法来处理按钮点击,并在内部实例化类以访问您想要的方法。假设你要访问ClassA

     public void OnClickMe(View v ){
    
    // Suppose you want to access a method from ClassA 
    ClassA accessmethod = new ClassA();
    // this is how you can call your method in another class
    accessmethod.MethodName();
    
        }
    

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 2011-01-22
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多