Toast.makeText(getApplicationContext(), String, Toast.LENGTH_LONG); ==›Здесь getApplicationContext() не может измениться на это?

Сначала формат Toast.makeText():

public static Toast makeText (Context context, CharSequence text, int duration) первый аргумент - это Context, функция getApplicationContext() также возвращает текущий контекст, все в порядке, но IMO, getApplicationContext() также можно заменить этим, как показано ниже:

public class ContextMenuResourcesActivity extends Activity {
    /** Called when the activity is first created. */

    private Button b1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    b1 = (Button)findViewById(R.id.button1);
    final int l = Toast.LENGTH_LONG;
    final String s1 = "some string";
    b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Toast t1 = Toast.makeText(this, s1, l);
                t1.show();
            }
        });
    }
}

IMO this означает класс ContextMenuResourcesActivity, который расширяет Context, поэтому он может заменить первый аргумент, требующий Context, но мне это не удалось, может ли кто-нибудь объяснить, почему?


person Searene    schedule 04.02.2012    source источник


Ответы (3)


Когда вы создаете новый OnClickListener, вы создаете анонимный класс, который реализует определенный интерфейс. Таким образом, this не относится к Activity, так как вы фактически находитесь в другом объекте.

Вот еще немного информации по теме Анонимные классы и делегаты

person William Melani    schedule 04.02.2012
comment
Спасибо, я раньше не рассматривал анонимный класс. - person Searene; 04.02.2012

В этом случае это указывает на экземпляр OnClickListener, чтобы создать представление или другие элементы пользовательского интерфейса, вам необходимо получить контекст, это можно сделать с помощью следующих различных методов:

getApplicationContext();
ContextMenuResourcesActivity.this;
v.getContext();
person jeet    schedule 04.02.2012

new OnClickListner() — это анонимный класс, который реализует интерфейс onclick, и this относится к экземпляру анонимного класса. Вместо этого используйте "Your_Activity_Name.this" для обозначения текущего контекста вашей деятельности.

person SHIVAM ARORA    schedule 23.11.2017