可以显示吐司但不能启动活动
Can show the toast but cant startActivity
我正在使用适配器 class 来填充我的列表视图,但是我的列表视图中的每个项目都有两个文本视图,我想为其设置 OnClick 侦听器。所以我将它设置在适配器 class 中,当我尝试显示吐司时它工作正常。
但问题是我无法在 OnClickListener 中启动 Activity。应用程序崩溃。请帮助或建议实现相同目标的替代方法。
activity 已在清单中提及。
这是我的代码:-
public class Adapter_NearMe_TyreWorx extends ArrayAdapter<List_NearMe> implements View.OnClickListener {
ArrayList<List_NearMe> arraylist;
private Context context;
private List<List`enter code here`_NearMe> list;
public Adapter_NearMe_TyreWorx(Context context, int resource, List<List_NearMe> objects) {
super(context, resource, objects);
this.context = context;
this.List = objects;
arraylist = new ArrayList<List_NearMe>();
arraylist.addAll(List);
}
TextView Btn_Call;
String Fac_landmark;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.canvas_two, parent, false);
List_NearMe list= list.get(position);
String Fac_name=list.getName();
Fac_landmark=list.getLandmark();
String Fac_gMap=list.getgMap();
String Fac_contact=list.getContact();
TextView distance=(TextView)view.findViewById(R.id.fac_distance);
TextView Fac_Name=(TextView)view.findViewById(R.id.fac_name);
TextView Fac_Address=(TextView)view.findViewById(R.id.fac_address);
Btn_Call=(TextView)view.findViewById(R.id.btn_call);
TextView Btn_Go=(TextView)view.findViewById(R.id.btn_go);
Btn_Go.setOnClickListener(this);
return view;
}
public void onClick(View v) {
Toast.makeText(getContext(),"Toast text",LENGTH.SHORT).show(); //working toast code
Intent intent = new Intent(getContext(), SampleActivity.class);
getContext().startActivity(intent);
}
}
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context.getApplicationContext(), SampleActivity.class));
}
});
在您在适配器的构造函数中设置的上下文中调用方法。
as startActivity()
只能从应用程序上下文中的方法启动,因为您的适配器不在那里,您必须引用您在 constructor
你的适配器 class
您必须添加一个 Intent 标志以从非 - Activity class Intent.FLAG_ACTIVITY_NEW_TASK
中添加此标志可以很好地尝试传递您的 Intent :
Intent intent = new Intent(getContext(), SampleActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);
或
Intent intent = new Intent(getContext(), SampleActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);
用上下文替换getContext()
。
Intent intent = new Intent(context, SampleActivity.class);
context.startActivity(intent);
我正在使用适配器 class 来填充我的列表视图,但是我的列表视图中的每个项目都有两个文本视图,我想为其设置 OnClick 侦听器。所以我将它设置在适配器 class 中,当我尝试显示吐司时它工作正常。
但问题是我无法在 OnClickListener 中启动 Activity。应用程序崩溃。请帮助或建议实现相同目标的替代方法。 activity 已在清单中提及。
这是我的代码:-
public class Adapter_NearMe_TyreWorx extends ArrayAdapter<List_NearMe> implements View.OnClickListener {
ArrayList<List_NearMe> arraylist;
private Context context;
private List<List`enter code here`_NearMe> list;
public Adapter_NearMe_TyreWorx(Context context, int resource, List<List_NearMe> objects) {
super(context, resource, objects);
this.context = context;
this.List = objects;
arraylist = new ArrayList<List_NearMe>();
arraylist.addAll(List);
}
TextView Btn_Call;
String Fac_landmark;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.canvas_two, parent, false);
List_NearMe list= list.get(position);
String Fac_name=list.getName();
Fac_landmark=list.getLandmark();
String Fac_gMap=list.getgMap();
String Fac_contact=list.getContact();
TextView distance=(TextView)view.findViewById(R.id.fac_distance);
TextView Fac_Name=(TextView)view.findViewById(R.id.fac_name);
TextView Fac_Address=(TextView)view.findViewById(R.id.fac_address);
Btn_Call=(TextView)view.findViewById(R.id.btn_call);
TextView Btn_Go=(TextView)view.findViewById(R.id.btn_go);
Btn_Go.setOnClickListener(this);
return view;
}
public void onClick(View v) {
Toast.makeText(getContext(),"Toast text",LENGTH.SHORT).show(); //working toast code
Intent intent = new Intent(getContext(), SampleActivity.class);
getContext().startActivity(intent);
}
}
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context.getApplicationContext(), SampleActivity.class));
}
});
在您在适配器的构造函数中设置的上下文中调用方法。
as startActivity()
只能从应用程序上下文中的方法启动,因为您的适配器不在那里,您必须引用您在 constructor
你的适配器 class
您必须添加一个 Intent 标志以从非 - Activity class Intent.FLAG_ACTIVITY_NEW_TASK
中添加此标志可以很好地尝试传递您的 Intent :
Intent intent = new Intent(getContext(), SampleActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);
或
Intent intent = new Intent(getContext(), SampleActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(intent);
用上下文替换getContext()
。
Intent intent = new Intent(context, SampleActivity.class);
context.startActivity(intent);