2013-04-22 42 views
1

在我的活动我经历了一堆的控件(输入字段),并创建一个findViewById(R.id.something)在非活动

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

的控件模板的getFieldControl包含一个开关语句应该返回不同类型的视图。

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

不过,我希望能够创建XML定义的意见,但因为类是没有活性的,因此它没有布局,这是不可能的。我想要做的是这样的:

case TEXTBOX: 
    view = (EditText) passedActivity.findViewById(R.id.edit_message); 
break; 

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

+0

通过上下文的非活性类的构造函数,并使用相同找到ID。 – Raghunandan 2013-04-22 12:08:02

+0

@Raghunandan有什么区别? – Blackbelt 2013-04-22 12:08:35

+0

我已经通过了上下文,但是如何从上下文中获取ID? – Rickard 2013-04-22 12:10:40

回答

7

使用LayoutInflater用于装载布局资产

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

view = mInflater.inflate(R.layout.edit_message, parent, false); 

对于充气的参数见this

public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

参数

resource 

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

root 

可选视图,使其将所生成的分层结构的父(如果attachToRoot为真),否则简单地一个目的在于提供一组的LayoutParams值的返回的层次结构的根(如果attachToRoot为false)。

attachToRoot 

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

+0

这似乎可能工作!我应该通过什么作为父参数? – Rickard 2013-04-22 12:18:10

+0

将活动上下文传递给非活动类的新构造函数NonActivityClass(ActivityName.this);然后使用相同的方法膨胀布局并找到所需视图的ID。 – Raghunandan 2013-04-22 12:20:49

0

如果您将活动的上下文传递给其他班级,则可以通过上下文查找所需的所有内容。你应该能够从上下文中获得R,以及相关的视图。

0

如果我正确理解您的问题,您需要将活动的上下文传递给ControlTemplate类。

例如 我发送(当前上下文)。

adapter = new ChecklistBaseAdapter(this, checklistitems); 
叫我的基本适配器类

public ChecklistBaseAdapter(Context context, ArrayList<Checklist> results) 

然后我可以引用改变控件上的当前活动与我的ChecklistBaseAdapter类时

希望它可以帮助