Вызов startActivityForResult () в OnItemClickListener () - PullRequest
0 голосов
/ 25 февраля 2012

Я реализовал «домашний экран» для своего приложения, который состоит из сетки, содержащей значки и текст. Это прекрасно работает, и я могу добавить OnItemClickListener, чтобы, например, нажатие на иконку создало тост. Но я не уверен, как вызвать startActivityForResult () отсюда. Я мог бы передать контекст приложения и использовать его для создания намерения и т. Д., Но это не похоже на правильный способ сделать это.

Мой код выглядит так:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.title);

    GridView gridview = (GridView) findViewById(R.id.icons_gridview);
    gridview.setAdapter(new HomeScreenAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            switch(position){
            case 0:
                //need to start new activity 1 from here
                break;
            case 1:
                //need to start new activity 2 from here
                break;
            }
        }
    });

Спасибо за любую помощь,

TLB

Ответы [ 3 ]

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

Просто используйте

startActivityForResult(new Intent(MainActivity.this, Activity1.class));

и все просто

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

Контекст должен быть контекстом текущей деятельности. «это» будет работать превосходно.

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

Метод 1 (мой предпочтительный метод)

Передача ActivityName.this как контекст, как я это делаю. Например

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.title);

    GridView gridview = (GridView) findViewById(R.id.icons_gridview);
    gridview.setAdapter(new HomeScreenAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        switch(position){
        case 0:
            Intent intent = new Intent(MyActivity.this, NextActivity.class);
            startActivityForResult(intent, 0);
            break;
        case 1:
            //need to start new activity 2 from here
            break;
        }
    }
});

Метод 2

Вы можете передать getApplicationContext() в качестве контекста;

Метод 3

Наличие поля Context mContext является распространенным методом. Установите его в начале вашего onCreate, затем используйте mContext, чтобы начать свою деятельность.

private Context mContext;

тогда

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.title);

    mContext = this;

    ...
 }

Затем вы можете начать новое действие, используя mContext в качестве параметра контекста

Intent intent = new Intent(mContext, NextActivity.class);
startActivityForResult(intent, 0);
...