参考_Android中,如何新建一个界面,并且实现从当前界面切换到到刚才新建的(另外一个)界面
参考地址: http://www.crifan.com/android_how_to_create_new_ui_and_switch_to_another_new_ui/
想要实现,在Android的ADT开发环境中,
在当前界面下,新建一个新的界面,然后从当前界面,切换到新建界面中。
其中:
1. 当前界面是主界面,对应的布局的xml文件是activity_main.xml
2.新建的一个界面,主要适用于实现文件夹浏览方面的功能。
前提知识
Activity
Android中,对于界面的控制,是对应的叫做Activity;
中文对应含义是 活动。
Intent
不同界面之间的切换过程的控制,包括之间数据的传递,叫做Intent;
类似于Mac的iOS开发中的Segue。
布局Layout
对应的界面如何布局,即长啥样,是对应的layout下面的对应的xml文件决定的;
界面长啥样,可以通过Graphical Layout去拖动控件并配置,也可以自己直接写xml文件,去配置,效果都是一样的。
详细实现过程
想要切换到另外一个界面,那么要确保新界面可用。
关于,如何从无到有,如何新建一个Activity,可以参考:
然后接着,总结一下,新增一个Activity,都涉及了哪些改动。
新增一个Activity所涉及的改动
可以用:
中的这个截图来总结:
![]()
AndroidManifest.xml
此处会在AndroidManifest.xml中新增对应的activity配置:
<activity
android:name="crifan.com.downloadsongtastemusic.DirectoryBrowser"
android:label="@string/title_activity_directory_browser"
android:parentActivityName="com.crifan.DownloadSongtaste.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.crifan.DownloadSongtaste.MainActivity" />
</activity>
对应的效果:
![]()
/res/values/strings.xml
增加了一些默认的字符串和标题值:
<string name="hello_world">Hello world!</string>
<string name="title_activity_directory_browser">Directory Browser</string>
效果:
![]()
/res/menu/activity_directory_browser.xml
对应的,添加了menu下面的xml配置文件,用于表示菜单配置方面的内容:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"/>
</menu>
效果:
![]()
/res/layout/activity_directory_browser.xml
对应的layout布局中,必须也要生成对应的配置。
我此处,是另外,借用了别人的配置,如下:
<!--
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DirectoryBrowser" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
</RelativeLayout>
--> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="250dp"
android:layout_height="400dp"
android:orientation="vertical"
> <TextView
android:id="@+id/mPath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="18sp"
>
</TextView> <ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="330dp"
>
</ListView> <LinearLayout
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/buttonConfirm"
android:layout_width="125dp"
android:layout_height="fill_parent"
android:text="OK"
/>
<Button
android:id="@+id/buttonCancle"
android:layout_width="125dp"
android:layout_height="fill_parent"
android:text="Cancel"
/>
</LinearLayout>
</LinearLayout>
效果是:
![]()
/src/crifan/com/downloadsongtastemusic/DirectoryBrowser.java
在对应的,domain下,新增了对应的此java函数,用于实现,对应的所有的逻辑,默认是:
package crifan.com.downloadsongtastemusic; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils; public class DirectoryBrowser extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_directory_browser);
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_directory_browser, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
} }
之所以是放在
/src/crifan/com/downloadsongtastemusic/
下面,那是因为之前自己新建activity时,设置的parent是
crifan.com.DownloadSongtasteMusic
可选:android-support-v4.jar
暂时不太清楚这个是啥东东。
不过,也找到了对应的位置,是在libs下面的:
![]()
如何从当前界面,切换到新建的,另外一个界面
当前界面中实现对应的Indent
在当前界面中,实现对应的Indent,表示要实现的是界面切换:
在我此处的src/crifan/com/downloadsongtastemusic/MainActivity.java中某个函数中实现了:
/** Choose folder for downloaded music file to save */
public void ChooseFoler(View view)
{
Intent intent = new Intent(MainActivity.this, DirectoryBrowser.class);
startActivityForResult(intent, FOLDER_RESULT_CODE);
}
注:
1. 其中此处用的是startActivityForResult,表示的是,启动一个Indent,(同时是要等新界面中返回来结果的)
所以,此处才需要另外再实现,获得了返回的结果后的处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(FOLDER_RESULT_CODE == requestCode){
Bundle bundle = null;
if(data!=null&&(bundle=data.getExtras())!=null){
EditText etSaveTo = (EditText) findViewById(R.id.saveTo);
etSaveTo.setText(bundle.getString("file"));
}
}
}
2.如果你无需获得返回值,那么只需要使用startActivity:
startActivity(intent);
在另外一个,新界面中,实现对应的初始化功能
就是在对应的onCreate中,做自己需要做的初始化的事情。
默认是的:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_directory_browser);
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
}
此处,可以根据自己需要,改为自己要的功能。比如此处文件夹浏览,就是,借鉴了别人的代码,写成类似于:
package crifan.com.downloadsongtastemusic; import java.io.File;
import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.support.v4.app.NavUtils; //import android.app.Activity;
import android.app.ListActivity; public class DirectoryBrowser extends ListActivity {
//public class DirectoryBrowser extends Activity { private List<String> items = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_directory_browser);
// Show the Up button in the action bar.
//getActionBar().setDisplayHomeAsUpEnabled(true);
getFiles(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/").listFiles());
} private void getFiles(File[] files){
items = new ArrayList<String>();
items.add(getString(R.string.goto_root));
for(File file : files){
items.add(file.getPath());
}
ArrayAdapter<String> fileList = new ArrayAdapter<String>(this,R.layout.file_list_row, items);
setListAdapter(fileList);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_directory_browser, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
} }
总结
其实,上述所有内容,官网的教程:
基本上都解释了。只是,没有自己实践,是无法真正理解的。
上面的内容,就是自己折腾过了,才搞清楚的。
参考_Android中,如何新建一个界面,并且实现从当前界面切换到到刚才新建的(另外一个)界面的更多相关文章
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- 参考bootstrap中的popover.js的css画消息弹框
前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- 在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的?
如何在EXCEL中如何让一列数字变成文本格式?就是想让单元格的左上角变一个绿绿的? 解决方案:将整列单元格格式设为文本,然后,选中该列,数据--分列--完成 详细步骤: (1)选中1行或者1列,再单击 ...
- 为什么一定要调用 setlocale 呢? 因为在 C/C++ 语言标准中定义了其运行时的字符集环境为 "C" ,也就是 ASCII 字符集的一个子集。使用setlocal改变整个应用程序的字符集编码方式(wcstombs使用前要设置 setlocale (LC_ALL, "chs"); )
setlocale 配置地域化信息. 语法: string setlocale(string category, string locale); 返回值: 字符串 函数种类: 操作系统与环境 内容 ...
- 问题:C#打开一个文本文档往里面写数据,没有就新建文档 ;结果:c#FileStream文件读写(转)
FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能.这是因为FileStream ...
- 网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)
一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件 ...
- 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架
不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...
- 使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换
使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换 需求: 日历区分交易日.非交易日 可以切换面板查看整年交易日信息 可以在手动调整交易日.非交易日 演示实例 序--使用软 ...
随机推荐
- docker operation method note
docker stop script #!/bin/bash CID_LIST=$(docker ps -q | xargs)if [ "$CID_LIST" = "&q ...
- Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)
控制台程序. 定义监听器类有许多方式.下面把监听器类定义为单独的类MouseHandler: // Mouse event handler for a selection button import ...
- linux下gcc默认搜索头文件及库文件的路径
一.头文件gcc 在编译时如何去寻找所需要的头文件:※所以header file的搜寻会从-I开始※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC ...
- eclipse不自动弹出提示
最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...
- execute、executeQuery和executeUpdate之间的区别
JDBCTM中Statement接口提供的execute.executeQuery和executeUpdate之间的区别 Statement 接口提供了三种执行 SQL 语句的方法:executeQu ...
- Error applying BeanValidation relational constraints 错误解决
来自http://blog.csdn.net/sivyer123/article/details/9185325 在hibernate.hbm.xml中加上 <property name=&qu ...
- 数据库SQL CRUD
1.删除表 drop table +表名 2.修改表 alter table+表名+ add(添加)+列名+ int(类型) alter table+表名+ drop(删除)+column(列) ...
- extjs 4.2 日期控件 选择时分秒功能
因为不支持时分秒,然后在网上也找了一段时间的插件,但是感觉起来都不大方便,最后找一个插件,只需要引用js文件,然后修改类型,就可以实现extjs下面的datafield带时分秒功能了. 步骤: 只需要 ...
- java 8种基本数据类型
数值型--> 整 型:int,short,long,byte 浮点型:double,float 字符型-->char 布尔型-->boolean
- MySQL的基本函数
charset(str) //返回字串字符集 mysql> select charset('demacia'); +--------------------+ | charset('demaci ...