Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Start Intent in Adapter

Tags:

android

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)

like image 736
yakusha Avatar asked Apr 11 '13 06:04

yakusha


People also ask

Can we call Startactivityforresult from adapter?

Yes, it's possible.

How do I start an intent in Java?

This method is defined on the Context object which Activity extends. The following code demonstrates how you can start another activity via an intent. # Start the activity connect to the # specified class Intent i = new Intent(this, ActivityTwo. class); startActivity(i);


Video Answer


2 Answers

you have passed context of activity in constructor so you can also use;

activity.startActivity(new Intent(activity, NVirementEmmeteur.class));

check here is sample code you get idea what to do:

setadapter like : adapter = new MyArrayAdapter(MainActivity.this, COUNTRIES);

adapter code:

package com.example.testapp;

import com.example.main.util.testActivity;

import android.content.Context;
import android.content.Intent;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

class MyArrayAdapter extends BaseAdapter {

    private LayoutInflater mInflater;
    private Context mcon;
    private String[] COUNTRIES_;

    public MyArrayAdapter(Context con, String[] countries) {
        // TODO Auto-generated constructor stub
        mcon = con;
        COUNTRIES_ = countries;
        mInflater = LayoutInflater.from(con);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return COUNTRIES_.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ListContent holder;
        View v = convertView;
        if (v == null) {
            v = mInflater.inflate(R.layout.my_spinner_style, null);
            holder = new ListContent();
            holder.line = (LinearLayout) v.findViewById(R.id.line_);
            holder.name = (TextView) v.findViewById(R.id.textView1);
            holder.name1 = (TextView) v.findViewById(R.id.textView2);
            holder.name2 = (ImageView) v.findViewById(R.id.imageView1);

            v.setTag(holder);
        } else {

            holder = (ListContent) v.getTag();
        }

        holder.name.setText("" + Html.fromHtml("" + COUNTRIES_[position]));
        holder.name1.setText("" + Html.fromHtml("" + COUNTRIES_[position]));

        holder.line.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                mcon.startActivity(new Intent(mcon, testActivity.class));
            }
        });

        return v;
    }

}

class ListContent {

    TextView name;
    TextView name1;
    ImageView name2;
    LinearLayout line;

}

Edited:

if your are use this constructor: then list.setadapter(new EfficientAdapter(myactivity.this));

public EfficientAdapter(Context context) {
          this.context = context;     
     }

then use : context.startActivity(new Intent(context, NVirementEmmeteur.class));


if you use this construdtor list.setadapter(new EfficientAdapter(myactivity.this, ComptePostarray));

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

then use activity.startActivity(new Intent(activity, NVirementEmmeteur.class));

Hope you understud....

like image 157
Dhaval Parmar Avatar answered Sep 27 '22 19:09

Dhaval Parmar


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

Intent intent = new Intent(context, NesneTani.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
like image 33
Hamza Polat Avatar answered Sep 27 '22 18:09

Hamza Polat