I want to start a new activity from this base adapter.
public class EfficientAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<ComptePost> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public Boolean isActusAstuce;
public static int flag = 0, counter=0;
private Context context;
public EfficientAdapter(Context context) {
this.context = context;
}
NVirementEmmeteur main;
int num = 0;
ViewHolder holder;
static String src;
public EfficientAdapter(Activity a, ArrayList<ComptePost> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// imageLoader = new ImageLoader(activity.getApplicationContext());
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public EfficientAdapter(NVirementEmmeteur m) {
main = m;
}
@Override
public int getCount() {
return data.toArray().length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public static class ViewHolder {
public TextView one;
public TextView two;
public TextView three;
public ImageView image;
public RelativeLayout relative_layout;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
holder.relative_layout.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
v.getContext().startActivity(new Intent(context, NVirementEmmeteur.class));
}
});
return vi;
}
}
I tried
context.startActivity(new Intent(context, NVirementEmmeteur.class));
and
v.getContext().startActivity(new Intent(context, NVirementEmmeteur.class));
but it force closes my application.
The intent should launch inside an onclicklistener()
from the list adapter. Can someone tell me how to launch an intent from my efficientadapter.class please.
Here is my logcat output:
04-11 10:07:50.878: E/AndroidRuntime(11179): FATAL EXCEPTION: main 04-11 10:07:50.878: E/AndroidRuntime(11179): java.lang.NullPointerException 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.content.ComponentName.(ComponentName.java:75) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.content.Intent.(Intent.java:2863) 04-11 10:07:50.878: E/AndroidRuntime(11179): at.adapter.EfficientAdapter$1.onClick(EfficientAdapter.java:141) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.view.View.performClick(View.java:2538) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.view.View$PerformClick.run(View.java:9152) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.os.Handler.handleCallback(Handler.java:587) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.os.Handler.dispatchMessage(Handler.java:92) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.os.Looper.loop(Looper.java:130) 04-11 10:07:50.878: E/AndroidRuntime(11179): at android.app.ActivityThread.main(ActivityThread.java:3687) 04-11 10:07:50.878: E/AndroidRuntime(11179): at java.lang.reflect.Method.invokeNative(Native Method) 04-11 10:07:50.878: E/AndroidRuntime(11179): at java.lang.reflect.Method.invoke(Method.java:507) 04-11 10:07:50.878: E/AndroidRuntime(11179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 04-11 10:07:50.878: E/AndroidRuntime(11179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 04-11 10:07:50.878: E/AndroidRuntime(11179): at dalvik.system.NativeStart.main(Native Method)
Pass activity context from activity and use same context while calling
Intent.
From activity:
within adapter:
Now use
mContext
to call Intent.also you can do like, Here
mContext
is YourBaseAdpter
Context
Objectchange your Constructer like, initialise
you have passed context of activity in constructor so you can also use;
check here is sample code you get idea what to do:
setadapter like :
adapter = new MyArrayAdapter(MainActivity.this, COUNTRIES);
adapter code:
Edited:
if your are use this constructor: then
list.setadapter(new EfficientAdapter(myactivity.this));
then use :
context.startActivity(new Intent(context, NVirementEmmeteur.class));
if you use this construdtor
list.setadapter(new EfficientAdapter(myactivity.this, ComptePostarray));
then use
activity.startActivity(new Intent(activity, NVirementEmmeteur.class));
Hope you understud....
Pass Context via Constructor and then just use this line of code:
Thanks :)
Replace onClick method with this it may work I didn't tried:
I faced this problem previously and tried all of the suggestions above, but the only one helped me to start an activity from an adopter was the solution proposed by @Md. Sajedul Karim.
I modified the code and used like this