2016-05-06 11 views
-1

Wenn ich versuche, getResources().getDrawable(icons[position]) zu verwenden, heißt es "kann Methode getResources() nicht auflösen" und gibt die Optionen an, um einen Getter zu verursachen, Eigenschaft zu verursachen oder Methode zu verursachen.getResources() in FragmentStatePagerAdapter?

Warum kann ich getResources() aus dieser Klasse nicht aufrufen?

import android.graphics.drawable.Drawable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 

import java.util.List; 



    public class MeinPageAdapter extends FragmentStatePagerAdapter { 

     private final List<Fragment> fragments; 
     private CharSequence Titles[]; 

     int icons [] = {R.drawable.ic_info, R.drawable.ic_home,   R.drawable.ic_settings}; 
    Drawable drawable; 

    public MeinPageAdapter(FragmentManager fm, List<Fragment> fragments,  CharSequence[] titles) { 
     super(fm); 
     this.fragments = fragments; 
     this.Titles = titles; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     drawable = getResources().getDrawable(icons[position]); 

     return Titles[position]; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return this.fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 


} 
+0

Nutzungskontext, um diese Funktion – AAlferez

Antwort

2

das, weil getResources() is a method of class Context ist, aber du bist in einem FragmentStatePagerAdapter, die nicht Kontext erstreckt sich.

Eine mögliche Lösung (und das beste, meiner Meinung nach) einen Kontext in Ihrem Adapter Konstruktor ist vorbei:

private Context context; 

public MeinPageAdapter(FragmentManager fm, List<Fragment> fragments,  CharSequence[] titles, Context context) { 
    super(fm); 
    this.fragments = fragments; 
    this.Titles = titles; 
    this.context = context; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    drawable = context.getResources().getDrawable(icons[position]); 

    return Titles[position]; 
} 

Da Sie eine Instanz des Adapters in einer Aktivität machst, können Sie this passieren wenn Ihr Adapter zu schaffen:

MeinPageAdapter adapter = new MeinPageAdapter(/* your other params*/, this); 
+2

Dies könnte möglicherweise undicht Speicher ausgeführt werden, wenn eine Aktivität in als Kontext-Parameter übergeben wird, wird dazu beitragen, diese mit context.getApplicationContext() vermeiden – fractalwrench

Verwandte Themen