我是 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/