web-dev-qa-db-ja.com

アダプタでアクティビティを開始する方法は?

カスタマイズしたアダプターでListActivityを使用しています。そして、各ビューの内部には、OnClickListenerを実装する必要があるいくつかのボタンがあります。 OnClickListenerをアダプターに実装する必要があります。ただし、startActivity()やsetResult()などの関数を呼び出す方法はわかりません。アダプターはActivityに拡張されないためです。

この問題を解決する最良の方法は何ですか?ありがとう

61
justicepenny

現在のコンテキストをアダプタコンストラクタに渡し、フィールドとして保存するだけです。次に、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(...);
             }
         });
     }
}
162
Robby Pond

onClickListenerを実装するときは、v.getContext.startActivity

btn.setOnClickListener(new OnClickListener() {                  
    @Override
    public void onClick(View v) {
        v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
    }
});
49
ccheneson
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);
             }
         });
     }
}
28
edwin

SDKの新しいバージョンでは、フラグアクティビティタスクを設定する必要があります。

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

インターフェースからリスナーを登録することで、アダプターからアクティビティへのコールバックを実行できます。インターフェースを作成します。

      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");
          }

//リスナーlを起動する必要がある場所でこれを行います

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

      In Activity Implement your method:


         MyActivity extends AppCompatActivity implements MyInterface{

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

AdopterのボタンonClickListenerでアクティビティを開始する簡単な方法:

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

アダプタクラスのアクティビティではなく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);
            }
        });
0
Nimesh Patel