Toast.makeText (getApplicationContext (), "String", Toast.LENGTH_LONG); ==> Здесь getApplicationContext () не может измениться на «это»? - PullRequest
2 голосов
/ 04 февраля 2012

Первый формат 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 , но я не смог, могу кто-нибудь объяснит почему?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2012

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

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

0 голосов
/ 24 ноября 2017

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

0 голосов
/ 04 февраля 2012

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

getApplicationContext();
ContextMenuResourcesActivity.this;
v.getContext();
...