2016-04-08 8 views
-1

ich eine benutzerdefinierte Liste Adapter für eine Listenansicht innerhalb einer Android-Anwendung habenProbleme mit Verabschiedung Kontext

ich habe gerade eine Erweiterung der applicaion Klasse, um einige globale Variablen zu speichern implimented

bei der Einstellung oder die Einstiegs- Variable i habe Kontext passieren

unten ist die Funktion des getView CustomListView

im Versuch, eine globale Variable einzustellen (im OnClickListener), indem sie mit dem gleichen Zusammenhang vorbei, die ich verwende erfolgreich auf eine Absicht Momente später.

aber ich die folgende Fehlermeldung

04-08 22:11:17.534 21919-21919/com.example.alex.camerascan4 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.alex.camerascan4, PID: 21919 
    java.lang.ClassCastException: com.example.alex.camerascan4.CategoryActivity cannot be cast to com.example.alex.camerascan4.MyApplication 
      at com.example.alex.camerascan4.CustomListView$1.onClick(CustomListView.java:74) 

ive auch versucht, die view.getContext Methode für die verfügbaren Ansichten verwenden, aber es ist immer noch nicht funktioniert

public View getView(final int position, final View convertView, final ViewGroup parent) { 
     // TODO Auto-generated method stub 
     Holder holder=new Holder(); 
     final View rowView; 
     rowView = inflater.inflate(R.layout.activity_category_listitem, null); 
     holder.tv=(TextView) rowView.findViewById(R.id.textView1); 
     holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 
     holder.tv.setText(mDataset.get(position)); 
     holder.img.setImageResource(R.drawable.camera); 
     rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Toast.makeText(context, "You Clicked "+mDataset.get(position), Toast.LENGTH_LONG).show(); 

       ((MyApplication) context).setRequestID(mDatamap.get(position)); 

       // login success and move to main Activity here. 
       Intent myIntent = new Intent(v.getContext(), DocumentActivity.class); 

       ((Activity) context).startActivity(myIntent); 
      } 
     }); 
     return rowView; 
    } 

Antwort

1

Der einfachste Weg MyApplication Objekt zuzugreifen wäre so -

public class MyApplication extends Application { 
    public static MyApplication context = null; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = this; 
    } 
} 

Jetzt wh erever Sie Methode der MyApplication Klasse aufrufen möchten, können Sie sich direkt wie folgt aufrufen -

MyApplication.context.setRequestID(mDatamap.get(position)); 

Sie müssen es nicht typisieren jeden Kontext Application Kontext zu verwenden, um. Sie können einfach wie oben in Ihrer Anwendung verwenden.

+1

Statisch auf einen Kontext zu halten ist ein Anti-Pattern, das zu Speicherlecks führt. Tu das nicht. –