66

我想从上下文中获取视图或 findViewById()?还是出于意图?

我试图在我的广播接收器中到达特定视图,onReceive 的参数是上下文和意图。

好吧,我有一堂课,里面是我的广播接收器。现在,我正在尝试将广播接收器与其分离,但我需要一种方法,以便我仍然可以与分离的广播接收器类中的类视图进行通信。

谢谢。

4

5 回答 5

75

For example you can find any textView:

TextView textView = (TextView) ((Activity) context).findViewById(R.id.textView1);
于 2015-09-05T12:52:58.273 回答
65

Starting with a context, the root view of the associated activity can be had by

View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content);

In Raw Android it'd look something like:

View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content)

Then simply call the findViewById on this

View v = rootView.findViewById(R.id.your_view_id);
于 2014-01-15T19:01:08.530 回答
7

在您的广播接收器中,您可以通过膨胀来自 XML 资源的根布局来访问视图,然后使用 findViewByid() 从该根布局中找到您的所有视图:

View view = View.inflate(context, R.layout.ROOT_LAYOUT, null);

现在您可以通过“视图”访问您的视图并将它们转换为您的视图类型:

myImage = (ImageView) view.findViewById(R.id.my_image);
于 2012-10-29T02:03:01.943 回答
1

首先使用这个:

LayoutInflater inflater = (LayoutInflater) Read_file.this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Read file is current activity in which you want your context.

View layout = inflater.inflate(R.layout.your_layout_name,(ViewGroup)findViewById(R.id.layout_name_id));

然后您可以使用它来查找布局中的任何元素。

ImageView myImage = (ImageView) layout.findViewById(R.id.my_image);
于 2014-03-31T06:03:28.263 回答
-2

你为什么不只使用单例?

import android.content.Context;


public class ClassicSingleton {
    private Context c=null;
    private static ClassicSingleton instance = null;
    protected ClassicSingleton()
    {
       // Exists only to defeat instantiation.
    }
    public void setContext(Context ctx)
    {
    c=ctx;
    }
    public Context getContext()
    {
       return c;
    }
    public static ClassicSingleton getInstance()
    {
        if(instance == null) {
            instance = new ClassicSingleton();
        }
        return instance;
    }
}

然后在活动类中:

 private ClassicSingleton cs = ClassicSingleton.getInstance();

在非活动类中:

ClassicSingleton cs= ClassicSingleton.getInstance();
        Context c=cs.getContext();
        ImageView imageView = (ImageView) ((Activity)c).findViewById(R.id.imageView1);
于 2017-07-14T18:05:28.010 回答