在适配器中启动意图 [英] Start Intent in Adapter

查看:79
本文介绍了在适配器中启动意图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从此基本适配器开始新的活动.

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

我尝试了

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

v.getContext().startActivity(new Intent(context, NVirementEmmeteur.class));

但它会强制关闭我的应用程序.

but it force closes my application.

意图应从列表适配器的 onclicklistener()内部启动.有人可以告诉我如何从我的efficiencyadapter.class中发起一个意图.

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.

这是我的logcat输出:

Here is my logcat output:

04-11 10:07:50.878:E/AndroidRuntime(11179):致命异常:主要04-11 10:07:50.878:E/AndroidRuntime(11179):java.lang.NullPointerException04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.content.ComponentName.(ComponentName.java:75)04-11 10:07:50.878:E/AndroidRuntime(11179):位于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):位于android.view.View.performClick(View.java:2538)04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.view.View $ PerformClick.run(View.java:9152)04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.os.Handler.handleCallback(Handler.java:587)04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.os.Handler.dispatchMessage(Handler.java:92)04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.os.Looper.loop(Looper.java:130)04-11 10:07:50.878:E/AndroidRuntime(11179):位于android.app.ActivityThread.main(ActivityThread.java:3687)04-11 10:07:50.878:E/AndroidRuntime(11179):位于java.lang.reflect.Method.invokeNative(本机方法)04-11 10:07:50.878:E/AndroidRuntime(11179):位于java.lang.reflect.Method.invoke(Method.java:507)04-11 10:07:50.878:E/AndroidRuntime(11179):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:842)04-11 10:07:50.878:E/AndroidRuntime(11179):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)04-11 10:07:50.878:E/AndroidRuntime(11179):在dalvik.system.NativeStart.main(本机方法)

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)

推荐答案

您已在构造函数中传递了活动上下文,因此您也可以使用;

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


检查这里是示例代码,您可以知道该怎么做:


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

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

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

适配器代码:

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;

}


如果您正在使用此构造函数:则 list.setadapter(new EfficientAdapter(myactivity.this));

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

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

然后使用: context.startActivity(new Intent(context,NVirementEmmeteur.class));

如果使用此构造方法,则 list.setadapter(new EfficientAdapter(myactivity.this,ComptePostarray));

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

然后使用 activity.startActivity(new Intent(activity,NVirementEmmeteur.class));

希望您了解.

这篇关于在适配器中启动意图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆