在我的活动中,我浏览了一堆控件(输入字段),并创建了一个
for(ControlTemplate field: fieldMap.get(string))
{
View view = field.getFieldControl(true, this);
l.addView(view, new PredicateLayout.LayoutParams(2, 0));
}
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;
但是,我希望能够从xml定义创建视图,但这是不可能的,因为该类不是活动,因此它没有布局。我想做的是这样的事情:
case TEXTBOX:
view = (EditText) passedActivity.findViewById(R.id.edit_message);
break;
其中passedActivity是创建ControlField类的活动。有没有办法将当前活动作为参数传递,或者可能只传递其布局资产?
答案 0 :(得分: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
要加载的XML布局资源的ID(例如,R.layout.main_page)
root
可选视图是生成的层次结构的父级(如果attachToRoot为true),或者只是为返回的层次结构的根提供一组LayoutParams值的对象(如果attachToRoot为false。)
attachToRoot
是否应将膨胀的层次结构附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类。
答案 1 :(得分:0)
如果您将活动的上下文传递给其他课程,则可以查看所需内容的上下文。您应该能够从上下文以及相关视图中获取R.
答案 2 :(得分:0)
如果我正确理解您的问题,您需要将活动的上下文传递给ControlTemplate类。
例如 我发送此(当前上下文)。
adapter = new ChecklistBaseAdapter(this, checklistitems);
调用我的基本适配器类时
public ChecklistBaseAdapter(Context context, ArrayList<Checklist> results)
然后,我可以使用我的ChecklistBaseAdapter类引用更改当前活动的控件。
希望有所帮助