在适配器中启动Intent

我想从这个基础适配器开始一个新的活动。

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

但它强制closures我的应用程序。

意图应该从列表适配器的onclicklistener()内部启动。 有人可以告诉我如何从我的efficientadapter.class启动一个intent请。

这是我的logcat输出:

04-11 10:07:50.878:E / AndroidRuntime(11179):致命exception:main 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):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):在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):at android.os.Looper.loop(Looper.java:130)04-11 10:07:50.878:E / AndroidRuntime(11179):在android.app.ActivityThrea (主动方法)04-11 10:07:50.878:E(Android) / 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)

Solutions Collecting From Web of "在适配器中启动Intent"

你已经在构造函数中传递了活动的上下文,所以你也可以使用;

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

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

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

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

希望你不要错过….

你也可以这样做,这里mContext是你的BaseAdpter Context对象

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

像初始化一样改变你的Constructer

  public EfficientAdapter(Context context, ArrayList<ComptePost> d){ } 

通过构造函数传递上下文,然后使用这一行代码:

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

谢谢 :)

我以前遇到过这个问题,并尝试了上述所有build议,但唯一一个帮助我从采用者开始活动的是@Md提出的解决scheme。 Sajedul Karim。

我修改了代码并像这样使用

 Intent intent = new Intent(context, NesneTani.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); 

设置你需要打开的类的意图。清单文件。 例如:

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

从活动传递活动上下文,并在调用Intent.使用相同的上下文Intent.

来自活动:

 yourview.setAdapter(new EfficientAdapter(this)); 

在适配器内:

  private Context mContext; public EfficientAdapter(Context c) { mContext = c; } 

现在使用mContext调用Intent。

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

在主activity上的listview中设置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); } });