2010-10-21 105 views
0

自从使用Android以来,我很好奇我如何让Android在方向更改(布局与布局平面)方面做所有事情。无活动交互的布局方向变化

目前我必须向游标适配器提供正确数量的db列和视图。这是正确的方式,还是我错过了什么?你们如何做到这一点?

请看看两个SimpleCursorAdapter,其中我提供了两个现有布局的相同布局名称(布局中有一个布局,布局中有一个)。唯一的区别是额外的db列“type”和附加视图“R.id.activities_row_text3”。

这是正确的方法吗?

Cursor cursor; 
SimpleCursorAdapter simpleCursorAdapter = null; 
if ((cursor = db.fetchActivities(connection)) != null) { 
    startManagingCursor(cursor); 
    int orientation = getResources().getConfiguration().orientation; 
    if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
     simpleCursorAdapter = new SimpleCursorAdapter(
             this, 
             R.layout.activities_row, 
             cursor, 
             new String[] { 
              "name", 
              "time" }, 
             new int[] { 
              R.id.activities_row_text1, 
              R.id.activities_row_text2 }); 
    } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     simpleCursorAdapter = new SimpleCursorAdapter(
             this, 
             R.layout.activities_row, 
             cursor, 
             new String[] { 
              "name", 
              "time", 
              "type" }, 
             new int[] { 
              R.id.activities_row_text1, 
              R.id.activities_row_text2, 
              R.id.activities_row_text3 }); 
    } 
    if (simpleCursorAdapter != null) { 
     setListAdapter(simpleCursorAdapter); 
    } 
} 

回答

0

最好只在创建simpleCursorAdapter一次,而开始活动。然后,在发生更改方向时,您可以使用方法SimpleCursorAdapter.changeCursorAndColumns()(或bindView())。您可能需要使列表无效以查看更改(notifyDataSetInvalidated())。

要避免在方向更改发生时重新启动活动,请参阅Handling orientation changes yourself

+0

感谢您的回答。上面显示的代码是创建每个活动的一部分,因为我的应用通常支持不同的布局。我得出的结论是,我一定在做一些非常错误的事情。随着不同的屏幕尺寸和方向,不同的光标/适配器/视图组合的列表确实增加了,我认为“问专业人员”。考虑如图所示的两种布局:一种有两列,一种有三列(只是一个测试 - 通常更复杂)。你使用两个不同的光标还是一个光标获取所有光标?您如何/在哪里决定使用哪些列/视图?谢谢hjw – 2010-10-21 18:33:35

+0

对一种查询使用一个游标(在自己的类中包装Cursor并提供方便的构造函数)。编写自己的适配器类而不是使用SimpleAdapters - 看起来在开始时被编译,但它变得很容易。在多个活动中重用这些类。您可以在运行时预先定义布局或更改布局特性(如列号),这两种解决方案都有优点和缺点。不要将UI与数据结构混合 - 在学习新技术之后,您将能够稍后改进代码。 – tomash 2010-10-21 19:07:28