簡體   English   中英

如何在適配器中啟動 Activity?

[英]How to start Activity in adapter?

我有一個帶有自定義適配器的 ListActivity ,並且在每個視圖內部,它可能有一些按鈕,我需要在其中實現OnClickListener 我需要在適配器中實現OnClickListener 但是,我不知道如何調用startActivity()setResult()類的函數。 由於適配器沒有擴展到 Activity。

那么解決這個問題的最佳方法是什么?

謝謝。

只需將當前 Context 傳遞給 Adapter 構造函數並將其存儲為字段。 然后在 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(...);
             }
         });
     }
}

在實現onClickListener ,您可以使用v.getContext.startActivity

btn.setOnClickListener(new OnClickListener() {                  
    @Override
    public void onClick(View v) {
        v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
    }
});
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, ToActivity.class); 
                   intent.putExtra("your_extra","your_class_value");
                 context.startActivity(intent);
             }
         });
     }
}

對於較新版本的 sdk,您必須設置標志活動任務。

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

可以使用以接口形式注冊偵聽器來完成從適配器到活動的回調:創建一個接口:

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

在適配器中讓我們說 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
                     }
                     }

在采用者的按鈕 onClickListener 中啟動活動的簡單方法:

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

第一個解決方案:

您可以在適配器內調用 start 活動,如下所示:

public class YourAdapter extends Adapter {
     private Context context;

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

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

第二種解決方案:

您可以撥打onClickListener您的按鈕出的YourAdapter類。 按着這些次序:

創建一個這樣的界面:

public YourInterface{
         public void  yourMethod(args...);
}

然后在你的適配器里面:

    public YourAdapter extends BaseAdapter{
               private YourInterface listener;

           public YourAdapter (Context context, YourInterface listener){
                    this.listener = listener;
                    this.context = context;
           }

           public View getView(...){
                View v;
         v.setOnClickListener(new OnClickListener() {
             void onClick() {
                 listener.yourMethod(args);
             }
         });
}

您啟動 yourAdapter 的位置將如下所示:

YourAdapter adapter = new YourAdapter(getContext(), (args) -> {
            startActivity(...);
        });

鏈接可能對您有用。

如果您想重定向 url 而不是來自您的適配器類的活動,請傳遞 with 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);
            }
        });
view.getContext().startActivity(intent);

view - public void onClick(View view) OnClick圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM