我似乎不明白是否可以将某项活动(包括)扩展到另一项活动中。我知道我可以膨胀布局xml,这可行,但我想知道我是否可以膨胀一项活动。例如,我有一个扩展Activity的类A和一个扩展ListActivity的另一个类B.我可以在A级,我的B级包括和使用吗? 这就是我的尝试:
A类:
LayoutInflater inflater = (LayoutInflater) MyActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflate list
BActivity list = new BActivity();
B组:
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>
所有这些都会引发错误:
错误提升课程BActivity
活动在清单中声明。
你知道我做错了什么吗?这不是扩充另一项活动的正确方法吗?我使用的是Android 2.2 api 8。 谢谢你的时间。
答案 0 :(得分:10)
你的问题标题和你的问题实际上并不是一回事。为了完整起见,我将回答这两个问题。
在Android中膨胀活动和膨胀视图有什么区别?
答案是没有区别。最终,它们在过程和逻辑上是相同的。但是,一个活动可能有许多不同的视图,您可能会根据需要setContentView()
多次到几个不同的布局或视图。活动需要布局资源,而视图可能是也可能不是布局。
你知道我做错了吗?
是。绝对。
BActivity list = new BActivity();
实际上并没有给某个活动充气。您构建活动,但没有启动它。 BActivity
定义为View
,但您的代码将其定义为ListActivity
。这完全是两件不同的事情。 ListActivity
有一个ListView
(扩展或其他); ListActivity
不是一个ListView
。Activity
及其子类为Contexts
,其生命周期由操作系统管理。它们包含所有类型的Views
并与之交谈,但它们本身并不是视图。 这不是给另一项活动充气的正确方法吗?
不,先生,但不要害怕!答案并不太遥远。
FAKE ANSWER(完整性) -
首先,要启动另一个活动以使其膨胀,您必须从startActivity()
拨打Context
。 Context
可以是应用程序,活动,广播接收器或任何其他应用程序组件(Component =在Android项目清单中声明的对象)。因此,如果您真的想要开始新的活动,则可以将BActivity list = new BActivity();
更改为:
Intent _listActivity = new Intent();
_listActivity.setClass(BActivity.class);
startActivity(_listActivity);
REAL ANSWER -
但是,由于您希望在A类中查看您的列表,因此BActivity不是一个活动,而是一个视图。这意味着你真正想要的是让它识别你的View,这是一个不同的解决方案。将public class BActivity extends ListActivity
更改为public class BActivity extends ListView
,现在突然间您拥有自定义视图!现在我们所要做的就是让List工作。
构建视图 - 视图与活动不同,因为它们没有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开发人员资源的更多信息。然而,其中一些事情只能通过实验来学习。
希望这一切都有所帮助!
FuzzicalLogic
答案 1 :(得分:0)
膨胀意味着解析对象的XML描述并使用所描述的属性构建Java对象。活动没有XML中的详细描述,因此无需夸大它们。
您可以从活动B派遣活动A,或者您可以使用Fragment的新概念将多个子活动合并到活动中。
顺便说一下,您可以定义自定义视图(通过子类化其中一个视图类)并在XML布局中使用它,只需将类填充为完整路径,例如:在布局中而不是说。