Подтвердить что ты не робот

Как начать работу в адаптере?

У меня есть ListActivity с моим адаптированным адаптером. и внутри каждого из них могут быть некоторые кнопки, в которых мне нужно реализовать OnClickListener. Мне нужно реализовать OnClickListener в адаптере. Однако я не знаю, как вызвать функцию типа startActivity() или setResult(). поскольку адаптер не распространяется на Activity.

так что лучший способ решить эту проблему? спасибо

4b9b3361

Ответ 1

Просто перейдите в текущий контекст к конструктору адаптера и сохраните его как поле. Затем внутри onClick вы можете использовать этот контекст для вызова startActivity().

псевдокод

public class MyAdapter extends Adapter {
     private Context context;

     public MyAdapter(Context context) {
          this.context = context;     
     }

     public View getView(...){
         View v;
         v.setOnClickListener(new OnClickListener() {
             void onClick() {
                 context.startActivity(...);
             }
         });
     }
}

Ответ 2

При реализации onClickListener вы можете использовать v.getContext.startActivity.

btn.setOnClickListener(new OnClickListener() {                  
    @Override
    public void onClick(View v) {
        v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
    }
});

Ответ 3

public class MyAdapter extends Adapter {
     private Context context;

     public MyAdapter(Context context) {
          this.context = context;     
     }

     public View getView(...){
         View v;
         v.setOnClickListener(new OnClickListener() {
             void onClick() {
                  Intent intent= new Intent(context, goto.class);
                   intent.putextra("your_extra","your_class_value");
                 context.startActivity(intent);
             }
         });
     }
}

Ответ 4

Для более новых версий sdk вы должны установить задачу активности флага.

public void onClick(View v)
 {
     Intent myactivity = new Intent(context.getApplicationContext(), OtherActivity.class);
     myactivity.addFlags(FLAG_ACTIVITY_NEW_TASK);
     context.getApplicationContext().startActivity(myactivity);
 }

Ответ 5

Обратный вызов от адаптера к активности может быть выполнен с помощью регистрации слушателя в виде интерфейса:  Сделайте интерфейс:

      public MyInterface{
         public void  yourmethod(//incase needs parameters );
         }

В адаптере Let Say MyAdapter:

    public MyAdapter extends BaseAdapter{
       private MyInterface listener;

    MyAdapter(Context context){
        try {
            this. listener = (( MyInterface ) context);
              } catch (ClassCastException e) {
               throw new ClassCastException("Activity must implement MyInterface");
          }

//делаем это, когда вам нужно стрелять слушателем         л

          try {
                listener . yourmethod ();
            } catch (ClassCastException exception) {
               // do something
            }

      In Activity Implement your method:


         MyActivity extends AppCompatActivity implements MyInterface{

                yourmethod(){
                //do whatever you want
                     }
                     }

Ответ 6

Если вы хотите перенаправить URL-адрес вместо активности из класса адаптера, передайте контекст с startactivity.

btnInstall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(link));
                intent.setData(Uri.parse(link));
                context.startActivity(intent);
            }
        });

Ответ 7

Простой способ начать деятельность в Adopter кнопкой onClickListener:

Intent myIntent = new Intent(view.getContext(),Event_Member_list.class);                    myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id());
                view.getContext().startActivity(myIntent);

Ответ 8

Вы можете начать действие, используя свой контекст следующим образом: context.startActivity(new Intent(context, TargetActivity.class));