2013-04-11 11 views
10

Chcę rozpocząć nową aktywność z tego adaptera podstawowego.Rozpocznij zamiar w adapterze

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

Próbowałem

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

i

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

ale siła zamyka mój wniosek.

Zamiar powinien wystartować wewnątrz onclicklistener() z adaptera list. Czy ktoś może mi powiedzieć, jak wprowadzić intencję z mojego pliku efficientadapter.class, proszę.

Oto moje wyjście logcat:

04-11 10: 07: 50,878: E/Android Runtime (11179): krytyczny wyjątek: Głównym 11/04 10: 07: 50,878: E/Android Runtime (11179): java.lang.NullPointerException 04-11 10: 07: 50.878: E/AndroidRuntime (11179): at android.content.ComponentName. (NazwaProduktu.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): na android.view.View.pe rformClick (View.java:2538) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): na android.view.View $ PerformClick.run (View.java:9152) 04-11 10:07: 50.878: E/AndroidRuntime (11179): na android.os.Handler.handleCallback (Handler.java:587) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): na android.os.Handler.dispatchMessage (Handler.java:92) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): na 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 (Metoda macierzysta) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): na java.lang.reflect.Method.invoke (Method.java:507) 04-11 10: 07: 50.878: E/Andr oidRuntime (11179): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:842) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): na com.android.internal. os.ZygoteInit.main (ZygoteInit.java:600) 04-11 10: 07: 50.878: E/AndroidRuntime (11179): at dalvik.system.NativeStart.główna (metoda macierzysta)

+1

stacktrace z LogCat? –

+0

Wysyłam mojego logcat koleś – yakusha

+0

proszę zaksięguj kod aktywności, tj. Tworzenie i ustawianie adaptera –

Odpowiedz

10

Przeszedłem kontekst działania w konstruktorze, więc możesz również użyć;

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

sprawdzić tutaj jest przykładowy kod masz pojęcia, co zrobić:

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

kod adapter:

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; 

} 

Zmieniano:

jeśli to Użyj tego konstruktora: wtedy list.setadapter(new EfficientAdapter(myactivity.this));

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

następnie użyć: context.startActivity(new Intent(context, NVirementEmmeteur.class));


Jeśli używasz tego 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()); 
    } 

się n używać activity.startActivity(new Intent(activity, NVirementEmmeteur.class));

Nadzieję understud ....

+0

Czy jesteś pewien co do 'getapplicationcontext()'? Drogi, nie jest lepiej używać kontekstu na poziomie aplikacji. –

+0

to jest wewnątrz mojej klasy adaptera, to nie zadziała – yakusha

+0

czy można wywołać startActivity z adaptera bez kontekstu? Nie sądzę, że –

4

również można zrobić podobny, Tu mContext jest Twój BaseAdpterContext Object

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

zmiana Twój Constructer jak, zainicjować

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

czy możesz mi pokazać, jak zadeklarować mContext nie dostaję tego – yakusha

+0

To działało dla mnie, tak samo jak zaakceptowana odpowiedź, tylko że ma więcej linii, więcej wyjaśnień i tej części brakuje 'public EfficientAdapter (kontekst kontekstowy, , ArrayList d) { this.context = context; } ' –

0

Ustaw intencję, aby klasa była potrzebna otworzyć. W pliku manifestu. Np

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

Następnie

  @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      Intent i=new Intent("android.intent.action.OPEN"); 
      StartActivity(i); 
        } 
0

kontekst aktywność podanie od aktywności i użyć tego samego kontekstu podczas wywoływania Intent.

z działalności:

yourview.setAdapter(new EfficientAdapter(this)); 

wewnątrz adaptera:

private Context mContext; 


    public EfficientAdapter(Context c) { 
     mContext = c; 

    } 

Teraz użyj mContext, aby zadzwonić Intent.

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

zestaw clickListener na pogrupowanych w główną działalność stamtąd rozpocząć zamiarem

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

koleś nie działa po prostu starał – yakusha

+0

są u coraz błąd lub po prostu czarny ekran? ... to, co jest w ur działalności intencją – Akilan

+0

pustego wskaźnika exeption na tym ekranie – yakusha

2

Przełęczy Context przez konstruktora i następnie po prostu użyć tej linii kodu:

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

Thanks :)

1

Napotkałem ten problem wcześniej i wypróbowałem wszystkie powyższe sugestie, ale Jednym z nich pomógł mi rozpocząć działalność od jednostki przyjmującej było rozwiązanie zaproponowane przez @Md. Sajedul Karim.

I zmodyfikowany kod i stosować jak to

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