2010-05-24 2 views
4

Eclipse маркирует findViewById (int) как undefined; он делал то же самое для getResources(), но мне удалось обойти это, вызвав вместо него context.getResources() (как показано ниже) и не может найти похожего обходного пути для findViewById. Вот код:findViewById undefined

package com.myapp.android.MyWidget; 

import android.appwidget.AppWidgetProvider; 
import android.appwidget.AppWidgetManager; 
import android.content.Context; 
import android.content.ComponentName; 
import android.content.pm.PackageManager; 
import android.content.res.Resources; 
import android.util.Log; 
import android.view.View; 
import android.widget.RemoteViews; 
import android.widget.Button; 
import android.os.Bundle; 

public class MyWidget extends AppWidgetProvider { 
private static String[] states; 

@Override 
public void onEnabled(Context context) { 
    final Button button = (Button) findViewById(R.id.widget_state_button); 

    states = context.getResources().getStringArray(R.array.states); 
} 

Есть ли другой пакет, который мне нужно импортировать для findViewById? Заранее спасибо.

ответ

2

Код работает по-разному, когда вы используете AppWidgets. По существу вам нужно работать с RemoteView, а не с традиционными кнопками и findViewByIds. См. Это similar question для ссылок о том, как писать AppWidgets. В частности, две ссылки для обучающих программ для developer.com.

+0

Спасибо! Я полагал, что это связано с работой внутри виджета вместо активности, но ничего не может найти - эти ссылки помогли мне выполнить то, что я пытался сделать. – areyling

1

Вы распространяете AppWidgetProvider. Но метод findViewById там не реализован; findViewById определяется в Activity.

+0

findViewById() - это метод, предоставляемый только API-интерфейсами классов Activity и View. В вашем методе onEnabled (..) вы вызываете findViewById (..) на «this» ссылку на неявный объект, который в вашем коде переводится в объект типа AppWidgetProvider. – Samuh

Смежные вопросы