在适配器中启动意图 [英] Start Intent in Adapter
问题描述
我想从此基本适配器开始新的活动.
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屋!