use*_*656 2 android android-inflate
我似乎不明白是否可以将一项活动(包括)扩展到另一项活动中.我知道我可以膨胀布局xml,这可行,但我想知道我是否可以膨胀一项活动.例如,我有一个扩展Activity的类A和一个扩展ListActivity的另一个类B. 我可以在A级,我的B级包括和使用吗?这是我试过的:
A类:
LayoutInflater inflater = (LayoutInflater) MyActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflate list
BActivity list = new BActivity();
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
并在xml(类A xml)中:(我希望在哪里看到列表)
<view class="com.test.BActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content" > </view>
Run Code Online (Sandbox Code Playgroud)
所有这些都会引发错误:
膨胀类BActivity时出错
活动在清单中声明.
你知道我做错了什么吗?这不是扩充另一项活动的正确方法吗?我使用的是Android 2.2 api 8.谢谢你的时间.
Fuz*_*gic 10
你的问题标题和你的问题实际上并不是一回事.为了完整起见,我将回答这两个问题.
在Android中膨胀活动和膨胀视图有什么区别?
答案是没有区别.最终,它们在过程和逻辑上是相同的.但是,活动可能有许多不同的视图,您可能会setContentView()根据需要多次使用几种不同的布局或视图.活动需要布局资源,而视图可能是也可能不是布局.
你知道我做错了什么吗?
是.绝对.
BActivity list = new BActivity();实际上并没有使活动膨胀.您正在构建活动,但没有启动它.BActivity为View,但您的代码将其定义为ListActivity.这完全是两件不同的事情.甲ListActivity 已经一个ListView(扩展或以其他方式); 一个ListActivity 是不是一个ListView.Activity它的子类Contexts具有由OS管理的生命周期.它们包含并说明Views所有类型,但它们本身并不是视图.这不是扩充另一项活动的正确方法吗?
不,先生,但不要害怕!答案并不太遥远.
假的答案(为了完整性) - 首先,要启动另一个活动以使其膨胀,您必须startActivity()从a 调用Context.A Context可以是应用程序,活动,广播接收器或任何其他应用程序组件(组件= Android项目清单中声明的对象).所以,如果你真的想开始一个新的Activity,你会BActivity list = new BActivity();改为:
Intent _listActivity = new Intent();
_listActivity.setClass(BActivity.class);
startActivity(_listActivity);
Run Code Online (Sandbox Code Playgroud)真实答案 - 但是,由于您希望在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)
{
}
Run Code Online (Sandbox Code Playgroud)膨胀活动=膨胀视图
您可以在这里选择,您可以添加视图,也可以膨胀视图.两者都有很多选择.根据你的问题,我假设你想要膨胀视图.只需BActivity list = new BActivity();改为setContentView(R.id.MyXML).当然,MyXML将是XML布局文件的名称.然后,SetContentView将使用上面列表中的第二个构造函数为您打开相应的视图(BActivity).
了解视图和活动之间的区别非常重要.它们之间的过程非常相似,但它们本身具有相互交织但分开的目的.
LayoutInflaterActivity都有一个称为方便的方法setContentView,其可以膨胀整个XML文件.LayoutInflater object.inflate().有关更多信息,请务必阅读有关Android开发人员资源的更多信息.然而,其中一些事情只能通过实验来学习.
希望这一切都有帮助!
FuzzicalLogic
| 归档时间: |
|
| 查看次数: |
5833 次 |
| 最近记录: |