在Android App UI中实现“向下钻取”导航

时间:2010-06-02 14:17:12

标签: android user-interface

我正在尝试学习如何在Android中执行操作,而且我不确定构建界面的最佳方法。

我一直致力于移植iPhone应用程序,该应用程序使用导航控制器和表格视图来查看不同的部分:基本上,有人触摸表格中的一个单元格,该单元格向下钻到另一个表格。当他们触摸该桌子上的一个单元格时,它会向下钻取到显示该信息的webview。

我想为Android应用做类似的事情,但我不知道如何,或者是否有更好的Android原生方式。我已经想出了如何将webview用于我的目的,但是在表树中前进和后退还不清楚。

3 个答案:

答案 0 :(得分:26)

所以在iphone上说当你向下钻取时我想你的意思是当用户触摸列表行并从右侧滑动一个新视图时,大多数时候它在顶部有一个导航栏让用户可以选择返回?

android处理此问题的方法只是启动一项新活动。因此,当单击listItem时,您将拥有“Books”ListActivity,您将定义一个新的意图来启动“Chapters”ListActivity等等。 iPhone顶部的导航栏不是Android中的标准UI,因为大多数人看到专用的“后退”键作为返回预览屏幕的一种方式。

如果您以前没有看过它,这就是您启动意图的方式:

Intent chaptersIntent = new Intent(this, Chapters.class);
this.startActivity(chaptersIntent);

本文值得快速阅读,因为它完美地解释了活动

http://d.android.com/guide/topics/fundamentals.html

另请看一下TableView的Android版本 - ListView:

http://d.android.com/reference/android/widget/ListView.html

和ListActivity:

http://d.android.com/reference/android/app/ListActivity.html


编辑::示例代码 我会做这样的事情

public class Books extends ListActivity {

private String[] mBooks = new String[]{ "Book1", "Book2", "Book3", "Book4" };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayAdapter<String> booksAdapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_1, 
            android.R.id.text1, 
            mBooks);

    this.setListAdapter(booksAdapter);

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    Intent mViewChaptersIntent = new Intent(this, Chapters.class);
    mViewChaptersIntent.putExtra("BookName", mBooks[position]);
    startActivity(mViewChaptersIntent);
}

}

因此,您将本书的ID作为额外内容传递给Intent,然后在您的Chapters Activity中,您将在onCreate方法中获得额外的内容:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Bundle extras = getIntent().getExtras();
    if(extras != null) {
        String bookId = extras.getString("BookName");
    }
}

最后确保将所有新活动添加到AndroidManifest.xml文件中:

<activity android:name=".YourClassName"
  android:label="@string/activity_name"
  >
</activity>

希望有所帮助

答案 1 :(得分:2)

创建Android ui的主要方式是使用xml。当你说下钻时,我并不完全确定你的意思,但如果你想让它改变视图,就像让一组xml元素可见而另一组不可见一样简单。查看开发人员页面以获取更多帮助。

http://developer.android.com/guide/topics/ui/index.html

忘记提及这也是一个非常好的初学者资源。 http://mobiforge.com/designing/story/understanding-user-interface-android-part-1-layouts

答案 2 :(得分:1)

正如已经指出的那样,布局的XML way是最受欢迎的。

  基本上,有人触摸了一个小区   桌子,钻到了   另一张桌子。当他们触摸细胞时   在那张桌子上,它钻到了一个   webview显示信息。

根据我从“钻取”一词的理解,这可能是你需要的

http://developer.android.com/guide/topics/ui/ui-events.html

来自官方文档

  

事件监听器是一个接口   包含单个的View类   回调方法。这些方法将是   由Android框架调用的时候   监听器所具有的视图   已注册是由用户触发的   与UI中的项目进行交互。