Как вызвать findViewById (R.id.textView) в другом классе, кроме MainActivity? - PullRequest
0 голосов
/ 17 июня 2020

Я новичок в Android. Я пытаюсь сослаться на представление по идентификатору из другого класса, чем MainActivity.

Примечание : у моего приложения одно действие.

Основное действие :

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("");
    }
}

Как ссылаться на textView по идентификатору в SecondClass? Как установить контекст как MainActivity в этом SecondClass?

1 Ответ

0 голосов
/ 17 июня 2020

Добавьте параметр 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;
                }

вы также можете передать вид родительского макета

  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, если это не является абсолютно необходимым, чтобы избежать утечки памяти.

...