2016-05-10 11 views
0

Hallo ich kann die Lösung für meine Frage nicht finden. Ich nehme Name der Bilder von db. Und dann sollte ich tat string zu image.setImageResource geben. Es gibt viele Antworten, einschließlich getResources().getIdentifier( Aber getResoruces() ist nicht funktionieren. Ich bekomme Fehler wie: Fehler: (40, 21) Fehler: Symbol Methode getResources() nicht gefunden Wie kann ich dieses Problem dank zu lösen.Bekannte Zeichenerkennung für Name

public class ReceivedItemAdapter extends ArrayAdapter<ReceivedItem> { 

    public ReceivedItemAdapter(Context context, ArrayList<ReceivedItem> items){ 
     super(context,R.layout.row_item_received,items); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     View customView = LayoutInflater.from(this.getContext()) 
      .inflate(R.layout.row_item_received, parent, false); 

     ReceivedItem item = getItem(position); 
     TextView textName = (TextView) customView.findViewById(R.id.nameTextView); 
     TextView textCalorie = (TextView) customView.findViewById(R.id.calorieTextView); 
     ImageView imageView = (ImageView) customView.findViewById(R.id.imageView); 
     textName.setText(item.getName()); 
     textCalorie.setText(item.getCalorie()+ " cal"); 
     String mDrawableName = item.getImageName(); 
     int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName()); 
     imageView.setImageResource(resID); 
     customView.setTag(item.getId()); 
     return customView; 
    } 
} 

Ich benutze diesen Code in einer Listview-Adapter-Klasse

+0

Bitte fügen Sie, wie und wo rufst du GetResources() –

+1

' getResources() 'funktioniert. aber Sie brauchen einen 'Kontext', um Zugriff auf diese Methode zu erhalten. –

+0

Wie kann ich Kontext hinzufügen? – berkt

Antwort

1

Beide Antworten sind richtig und Arbeit.

Aber es ist einfacher

int resID = customView.getContext().getResources().getIdentifier(mDrawableName , "drawable", getPackageName()); 

rufen Sie können dies tun, da jede Ansicht eine Referenz auf den Kontext hat

public final Context getContext()

Returns the context the view is running in, through which it can access the current theme, resources, etc.

Returns Context The view's Context.

+0

Ich weiß, erhalten ID: 7614 java.lang.OutOfMemoryError: Es konnte keine 17.640.012 Byte-Zuordnung mit 5.184.936 freien Bytes und 4MB bis OOM bei dalvik.system.VMRuntime.newNonMovableArray (native Methode) – berkt

+0

Dies ist ein anderes Problem zuzuordnen, aber wahrscheinlich sind Ihre Bilder, die Sie versuchen zu laden, zu groß –

+0

Danke, dass ich mit diesem Problem umgehen, indem ich sie kleiner mache. Gibt es eine Lösung statt kleiner zu machen? – berkt

1

Bitte einen Code schreiben, bevor wir Ihnen helfen können.

Wenn Sie auf getResources außerhalb und Aktivität oder ähnliches zugreifen möchten, müssen Sie einen Verweis auf den Kontext abrufen und dann context.getResources aufrufen.

Rufen customView.getContext(). GetResources()

+0

Ich bearbeite meine Frage. Ich möchte auf den Listview-Adapter zugreifen. – berkt

1

Sie müssen die Context-Instanz in Ihrem Adapter zu halten, und dann zu context.getResources nennen()

public class ReceivedItemAdapter extends ArrayAdapter<ReceivedItem> { 

private final Context context; 

public ReceivedItemAdapter(Context context, ArrayList<ReceivedItem> items){ 
    super(context,R.layout.row_item_received,items); 
    this. context = context; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 

    View customView = LayoutInflater.from(this.getContext()) 
      .inflate(R.layout.row_item_received, parent, false); 

    ReceivedItem item = getItem(position); 
    TextView textName = (TextView) customView.findViewById(R.id.nameTextView); 
    TextView textCalorie = (TextView) customView.findViewById(R.id.calorieTextView); 
    ImageView imageView = (ImageView) customView.findViewById(R.id.imageView); 
    textName.setText(item.getName()); 
    textCalorie.setText(item.getCalorie()+ " cal"); 
    String mDrawableName = item.getImageName(); 
    int resID = context.getResources().getIdentifier(mDrawableName , "drawable", getPackageName()); 
    imageView.setImageResource(resID); 
    customView.setTag(item.getId()); 
    return customView; 
} 
Verwandte Themen