Начать настройку в адаптере
Я хочу начать новую активность с этого базового адаптера.
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()
из адаптера списка. Может кто-нибудь сказать мне, как запустить намерение из моего bestadapter.class, пожалуйста.
Вот мой вывод logcat:
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(собственный метод) 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(собственный метод)
Ответы
Ответ 1
вы передали контекст активности в конструкторе, чтобы вы могли также использовать;
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;
}
Отредактировано:
если вы используете этот конструктор: then list.setadapter(new EfficientAdapter(myactivity.this));
public EfficientAdapter(Context context) {
this.context = context;
}
затем используйте: context.startActivity(new Intent(context, NVirementEmmeteur.class));
если вы используете этот 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));
Надеюсь, ты не понимаешь....
Ответ 2
также вы можете сделать, здесь mContext
- это ваш BaseAdpter
Context
Объект
Intent ieventreport = new Intent(mContext,Your.class);
mContext.startActivity(ieventreport);
измените свой конструктор как, initialize
public EfficientAdapter(Context context, ArrayList<ComptePost> d){
}
Ответ 3
Ранее я столкнулся с этой проблемой и пробовал все вышеперечисленные предложения, но единственным, кто помог мне начать работу у усыновителя, было решение, предложенное @Md. Саедул Карим.
Я изменил код и использовал его как
Intent intent = new Intent(context, NesneTani.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Ответ 4
Передайте контекст через конструктор, а затем просто используйте эту строку кода:
Intent intent=new Intent(context.getApplicationContext(), YourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
context.getApplicationContext().startActivity(intent);
Спасибо:)
Ответ 5
Задайте намерение для класса u нужно открыть. В файле манифеста.
Например:
<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);
}
Ответ 6
Пропустить контекст активности активности и использовать тот же контекст при вызове Intent.
От активности:
yourview.setAdapter(new EfficientAdapter(this));
внутри адаптера:
private Context mContext;
public EfficientAdapter(Context c) {
mContext = c;
}
Теперь используйте mContext
для вызова Intent.
startActivity(new Intent(mContext, NVirementEmmeteur.class));
Ответ 7
установить clickListener в listview в mainactivity оттуда запустите намерение
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);
}
});
Ответ 8
Замените метод onClick этим, он может работать, я не пробовал:
@Override
public void onClick(View v) {
v.getContext().startActivity(new Intent(v.getContext(), NVirementEmmeteur.class));
}