gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:14:50 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com