findViewById(R.id.something)在非活动类中

Ric*_*ard 1 layout user-interface android android-layout

在我的活动中,我通过一堆控件(输入字段),并创建一个

for(ControlTemplate field: fieldMap.get(string))
{
    View view = field.getFieldControl(true, this);
    l.addView(view, new PredicateLayout.LayoutParams(2, 0));
}
Run Code Online (Sandbox Code Playgroud)

ControlTemplate的getFieldControl包含一个switch语句,该语句应该返回不同类型的视图.

  case LABEL:                       
        view = new TextView(context);
        view.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        ((TextView) view).setText(value);
  break;
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够从xml定义创建视图,但这是不可能的,因为该类不是活动,因此它没有布局.我想做的是这样的事情:

case TEXTBOX:   
    view = (EditText) passedActivity.findViewById(R.id.edit_message);
break;
Run Code Online (Sandbox Code Playgroud)

其中passedActivity是创建ControlField类的活动.有没有办法将当前活动作为参数传递,或者可能只传递其布局资产?

Aru*_*n C 7

使用LayoutInflater加载布局资产

    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view = mInflater.inflate(R.layout.edit_message, parent, false);
Run Code Online (Sandbox Code Playgroud)

对于充气的参数,请参阅

public View inflate (int resource, ViewGroup root, boolean attachToRoot)
Run Code Online (Sandbox Code Playgroud)

参数

resource
Run Code Online (Sandbox Code Playgroud)

要加载的XML布局资源的ID(例如,R.layout.main_page)

 root
Run Code Online (Sandbox Code Playgroud)

可选视图,使其将所生成的分层结构的父(如果attachToRoot为真),否则简单地提供一组的LayoutParams值的返回的层次结构的根对象(如果attachToRoot是假的.)

attachToRoot
Run Code Online (Sandbox Code Playgroud)

是否应将膨胀的层次结构附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类.