[英]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.