java - 如何在MainActivity之外的另一个类中调用findViewById(R.id.textView)?

标签 java android android-activity android-context

我是 Android 新手。 我试图通过 ID 从与 MainActivity 不同的类中引用 View 。

注意:我的应用只有一个 Activity。

主要 Activity :

public class MainActivity extends AppCompatActivity {

 @Override
    protected void onCreate(Bundle savedInstanceState)//Activity Oncreate callback
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
@Override
    public boolean onCreateOptionsMenu(Menu menu) //Oncreate Options_menu callback
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) {
    case R.id.option1:
    //Here am calling a method from another class

    SecondClass secondClassObject=new SecondClass();
    secondClassObject.method1();
    }
    return true;
}

第二类:

public class SecondClass {
    public void method1(){
        TextView tv1 = (TextView)findViewById(R.id.textView);
        tv1.setText("");
    }
}

如何在SecondClass中通过ID引用textView?如何在这个 SecondClass 中将上下文设置为 MainActivity?

最佳答案

为您的方法添加 Activity 参数

public void method1(Activity act){
    TextView tv1 = (TextView)act.findViewById(R.id.textView);
    tv1.setText("");
}

从您的 Activity 中定义一个 Activity 变量Activity act;,以便在其他函数中使用它。将您的 Activity 的值分配给变量act=this;并且最后用它来实现你想要的功能。

                public class MainActivity extends AppCompatActivity {

                Activity act;
                 @Override
                    protected void onCreate(Bundle savedInstanceState)//Activity Oncreate callback
                    {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_main);
                        act=this;
                    }
                @Override
                    public boolean onCreateOptionsMenu(Menu menu) //Oncreate Options_menu callback
                    {
    act=this;

                        // Inflate the menu; this adds items to the action bar if it is present.
                        getMenuInflater().inflate(R.menu.main_menu, menu);
                        return true;
                    }
                    @Override
                    public boolean onOptionsItemSelected(MenuItem item) { 
                    switch(item.getItemId()) {
                    case R.id.option1:
                    //Here am calling a method from another class

                    //SecondClass secondClassObject=new SecondClass();
                    //secondClassObject.method1();
                    SecondClass secondClassObject=new SecondClass();
                                secondClassObject.method1(act);
                    }
                    return true;
                }

您还可以传递父布局 View

  public void method1(View act){
    TextView tv1 = (TextView)act.findViewById(R.id.textView);
    tv1.setText("");
  }

并这样调用它

 SecondClass secondClassObject=new SecondClass();
  secondClassObject.method1(findViewById(R.id.your_parent_layout));

如果不是绝对必要,请避免使用传递 Activity 方法,以避免内存泄漏的可能性。

关于java - 如何在MainActivity之外的另一个类中调用findViewById(R.id.textView)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62428622/

相关文章:

java - 测量下载速度 Java

android.database.sqlite.SQLiteException : near "Standards": syntax error (code 1)

java - 基于位置的自动移动静音 Action

android:如何检查应用程序是否在后台运行 2

java - Eclipse,ADT,SDK,JDK

完成 Activity 后android进程仍然存在

java - 重用部分代码

Java随机移动文件

java - 如何将 JAXB 运行时库与 OpenJDK 11 捆绑在一起?

java - Android:访问安全的 xml 文件