Начало новой активности из неактивного класса - PullRequest
0 голосов
/ 04 марта 2012

Я знаю, что таких вопросов было много, но я не нашел ответа.

Что у меня есть:

  1. A GridView + класс ButtonAdapter , который также имеет класс OnClickListener , чтобы получить нажатую кнопку на GridView. (Вы можете увидеть базовую структуру здесь: http://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/)

Что мне нужно:

Мне нужно начать новый Activity из моего OnClickListener класса. Как я знаю, я могу сделать это только в своем основном классе активности (или другом классе, который расширяет Activity), но это то, что мне действительно нужно. Я знаю только эту структуру:

Intent i = new Intent(MyMain.this, MyNewActivity.class)
startActivity(i);

Я хочу использовать эту структуру из моего OnClickListener класса.

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

В вашем конструкторе ButtonAdapter передайте контекст Activity, где вы строите адаптер, а затем используйте это Context, чтобы запустить новый Activity.

Редактировать: Следуя этому руководству при сборке адаптера, вы сделаете что-то вроде этого:

ButtonAdapter adapter = new ButtonAdapter(this);// this is the activity(if you create in an activity the adapter)

Context, который вы получите в конструкторе вашегоButtonAdapter вы передадите его своему OnClickListener:

    class MyOnClickListener implements OnClickListener  
    {  
     private final int position;  
private Context ctx;

     public MyOnClickListener(int position, Context ctx)  
     {  
      this.position = position;  
this.ctx = ctx;
     }  

     public void onClick(View v)  
     {  
      // Preform a function based on the position  
      someFunction(this.position)  
      Intent i = new Intent(MyMain.this, MyNewActivity.class)
ctx.startActivity(i);
     }  
    }  

и будете использовать его так:

btn.setOnClickListener(new MyOnClickListener(position, mContext));
0 голосов
/ 04 марта 2012

Поскольку у вас есть объект View в вашем MyOnClickListener.onClick (), вы можете просто использовать View.getContext () (http://developer.android.com/reference/android/view/View.html#getContext()), чтобы получить объект контекста и запустить другое действие.

...