カスタマイズしたアダプターでListActivityを使用しています。そして、各ビューの内部には、OnClickListenerを実装する必要があるいくつかのボタンがあります。 OnClickListenerをアダプターに実装する必要があります。ただし、startActivity()やsetResult()などの関数を呼び出す方法はわかりません。アダプターはActivityに拡張されないためです。
この問題を解決する最良の方法は何ですか?ありがとう
現在のコンテキストをアダプタコンストラクタに渡し、フィールドとして保存するだけです。次に、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, goto.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");
}
//リスナーlを起動する必要がある場所でこれを行います
try {
listener . yourmethod ();
} catch (ClassCastException exception) {
// do something
}
In Activity Implement your method:
MyActivity extends AppCompatActivity implements MyInterface{
yourmethod(){
//do whatever you want
}
}
AdopterのボタンonClickListenerでアクティビティを開始する簡単な方法:
Intent myIntent = new Intent(view.getContext(),Event_Member_list.class); myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id());
view.getContext().startActivity(myIntent);
アダプタクラスのアクティビティではなく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);
}
});