19

このベース アダプターから新しいアクティビティを開始したいと考えています。

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

しかし、それは私のアプリケーションを強制的に閉じます。

onclicklistener()インテントはリスト アダプター内で起動する必要があります。誰かが私の effectiveadapter.class からインテントを起動する方法を教えてください。

これが私のlogcat出力です:

04-11 10:07:50.878: E/AndroidRuntime(11179): 致命的な例外: メイン 04-11 10:07:50.878: E/AndroidRuntime(11179): java.lang.NullPointerException 04-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): at 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(ネイティブ メソッド) で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 (ネイティブ メソッド) で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 (ネイティブ メソッド) で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(ネイティブメソッド)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(ネイティブメソッド)

4

9 に答える 9

24

コンストラクターでアクティビティのコンテキストを渡したので、使用することもできます。

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

ここで確認してください。何をすべきかがわかるサンプルコードです。

次のような setadapter :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));

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

次に使用します:context.startActivity(new Intent(context, NVirementEmmeteur.class));


このコンストラクタを使用する場合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));

ご理解いただければ幸いです....

于 2013-04-11T06:04:55.423 に答える
9

以前にこの問題に直面し、上記のすべての提案を試しましたが、@Md によって提案されたソリューションだけが、アダプターからアクティビティを開始するのに役立ちました。サジェドゥル・カリム。

私はコードを変更し、このように使用しました

Intent intent = new Intent(context, NesneTani.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
于 2016-09-02T19:17:12.937 に答える
8

また、次のようにすることもできます。ここmContextにあなたのBaseAdpter Contextオブジェクトがあります

 Intent ieventreport = new Intent(mContext,Your.class);   
 mContext.startActivity(ieventreport);

コンストラクタを次のように変更し、初期化します

 public EfficientAdapter(Context context, ArrayList<ComptePost> d){
}
于 2013-04-11T06:08:13.303 に答える
2

コンストラクターを介してコンテキストを渡し、次のコード行を使用します。

Intent intent=new Intent(context.getApplicationContext(), YourActivity.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
  context.getApplicationContext().startActivity(intent);

ありがとう :)

于 2016-03-12T19:25:19.020 に答える
1

開く必要があるクラスのインテントを設定します。マニフェスト ファイルで。例えば:

<activity android:name=".openingclass"
android:label="@string/app_name">
 <intent-filter>
 <action android:name="android.intent.action.OPEN" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
 </activity>

それで

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
           Intent i=new Intent("android.intent.action.OPEN");
           StartActivity(i);
                  }
于 2013-04-11T06:09:38.037 に答える
0

アクティビティからアクティビティ コンテキストを渡し、呼び出し中に同じコンテキストを使用するIntent.

アクティビティから:

yourview.setAdapter(new EfficientAdapter(this));

アダプタ内:

 private Context mContext;


  public EfficientAdapter(Context c) {
        mContext = c;

    }

mContextIntent を呼び出すために使用します。

startActivity(new Intent(mContext, NVirementEmmeteur.class));
于 2013-04-11T06:11:20.747 に答える
0

そこからメインアクティビティのリストビューにclickListenerを設定してインテントを開始します

    lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{ 
    Intent intent = new Intent(getActivity,Test.class);
startActivity(intent);
}
});
于 2013-04-11T06:13:44.970 に答える