2010-05-24 80 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而不是传统的Button和findViewByIds。有关如何编写AppWidgets的链接,请参阅此similar question。特别是developer.com教程的两个链接。

+0

谢谢!我认为这与在一个小部件而不是活动中工作有关,但找不到任何东西 - 这些链接帮助我完成了我正在尝试做的事情。 – areyling 2010-05-24 12:40:20

1

您正在延伸AppWidgetProvider。但方法findViewById没有在那里实现; findViewByIdActivity中定义。

+0

findViewById()是仅由Activity和View类的API提供的方法。 在您的onEnabled(..)方法中,您正在调用findViewById(..)on this this隐式对象引用,在您的代码中将其转换为AppWidgetProvider类型的对象。 – Samuh 2010-05-24 11:16:07