我似乎不明白是否有可能把一项活动夸大(包括)为另一项活动。我知道我可以对布局xml进行膨胀,这是可行的,但我想知道我是否可以对活动进行膨胀。例如,我有一个扩展activity的类和另一个扩展listactivity的类。我能把我的B类列入A类吗?
这就是我尝试过的:
甲级:
LayoutInflater inflater = (LayoutInflater) MyActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflate list
BActivity list = new BActivity();
乙类:
public class BActivity extends ListActivity {
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
List<Model> models= new ArrayList<Model>();
models.add(new Model("John"));
models.add(new Model("Cage"));
setListAdapter(new MyAdapter(this, models));
ListView list = getListView();
}
}
在XML中(A级XML):(用于我想查看列表的位置)
<view class="com.test.BActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content" > </view>
所有这些都会抛出错误:
膨胀类活动时出错
活动在清单中声明。
你知道我做错了什么吗?这不是给另一个活动充气的正确方法?我正在使用android 2.2api 8。
谢谢你抽出时间。
最佳答案
你的题目和你的题目其实不一样。为了完整起见,我将两者都回答。
在android中,增加一个活动和增加一个视图有什么区别?
答案是没有区别。最终,它们在过程和逻辑上是相同的。但是,一个活动可能有许多不同的视图,您可能会根据需要对多个不同的布局或视图进行多次setContentView()
。活动需要布局资源,视图可以是布局,也可以不是布局。
你知道我做错了什么吗?
对。当然。
您的代码:BActivity list = new BActivity();
实际上并没有使活动膨胀。你正在构建活动,但不是开始它。
XML将BActivity
定义为View
,但代码将其定义为ListActivity
。这完全是两码事。aListActivity
具有aListView
(扩展或其他);aListActivity
不是aListView
。Activity
及其子类是具有由操作系统管理的生命周期的Contexts
。它们包含并与所有类型的Views
对话,但它们本身不是视图。
这不是给另一个活动充气的正确方法?
不,先生,但不要害怕!答案并不遥远。
假答案(为了完整)-
首先,要启动另一个活动以使其膨胀,必须从astartActivity()
调用Context
。Context
可能是应用程序、活动、广播接收器或任何其他应用程序组件(组件=Android项目清单中声明的对象)。因此,如果您真的想开始一项新的活动,您可以将BActivity list = new BActivity();
更改为:
Intent _listActivity = new Intent();
_listActivity.setClass(BActivity.class);
startActivity(_listActivity);
真正的答案-
但是,由于您希望在类A中看到列表,因此bactivity不是一个活动,而是一个视图。这意味着你真正想要的是让它认识到你的观点,这是一个不同的解决方案。将
public class BActivity extends ListActivity
更改为public class BActivity extends ListView
现在您突然有了一个自定义视图!!现在我们所要做的就是让名单生效。构建视图-视图不同于活动,因为它们没有
public void onCreate(Bundle bundle)
。BActivity.onCreate()
中的所有内容都将放在构造函数中。但是,你没有一个合适的构造器…嗯,有三个构造器可供选择——添加以下一个或全部(首先,您可能需要选项1或2)。但您不会同时使用这两个提示提示,请阅读注释://This constructor is used when the View is created from code (not XML!!)
public BActivity(Context context)
{
}
//This constructor is used when the View is created from XML (not code!!)
public BActivity(Context context, AttributeSet attr)
{
}
//This constructor is used when the View is created from XML with a Style defined in separate XML.
public BActivity(Context context, AttributeSet attr, int defStyle)
{
}
放大活动=放大视图
您可以在这里进行选择,可以添加视图,也可以对视图进行充气。两者都有很多选择。根据你的问题,我认为你想夸大观点。只需将
BActivity list = new BActivity();
更改为setContentView(R.id.MyXML)
。当然,myxml是xml布局文件的名称。然后,setContentView将使用上面列表中的第二个构造函数为您打开适当的视图(bactivity)。了解视图和活动之间的区别很重要。它们之间的过程非常相似,但它们本身有一个相互交织但又相互独立的目的。
活动必须有视图。
视图必须在上下文中。
活动是上下文,但上下文也可能是其他几个可能的类之一。
都可以使用
LayoutInflater
充气Activity
有一个称为setContentView
的方便方法,它可以对整个xml文件进行膨胀。视图必须使用
LayoutInflater object.inflate()
手动为每个视图充气。一项活动有一个生命周期。视图有一个绘制周期。
要了解更多信息,请阅读android开发者资源。然而,有些东西只是通过实验来学习的。
希望这一切都有帮助!
绒毛状