在Android開發過程中,有時候會遇到將上一個視窗中的值傳遞到下一個視窗,還有從當前視窗返回至上一層視窗的情況。而且有時候程式退出,使用者希望將值儲存至本地檔案系統中或資料庫中,基於以上需要,在這裡我做一個簡單例項,來完成上述功能,其中會用到選單,按鈕,文字框等元件,具體如下所示:
主介面,在文字框中輸入值,點選按鈕進入下一個窗體,如下所示:
/**
* 點選進入下一個窗體
* @return
*/
public boolean next(){
//新建Intent物件
Intent intent = new Intent();
//指定Intent要啟動的類
intent.setClass(MainActivity.this, SubActivity.class);
/*new一個Bundle物件,並將要傳遞的資料傳入*/
Bundle bundle = new Bundle();
//傳值,該值由上面的EditText提拱
String inputStr = inputEditText.getText().toString();
if(inputStr.length() == 0){
Toast.makeText(MainActivity.this, "hello world!!!", Toast.LENGTH_SHORT).show();
return false;
}
bundle.putString("inputStr" , inputStr);//相當於session.setAttribute()
/*將Bundle物件assign給Intent*/
intent.putExtras(bundle);//傳給activity
//啟動一個新的activity
//startActivity(intent);
//如果下一個窗體返回時所做的處理
startActivityForResult(intent, 0);
//結束當前的Activity
//MainActivity.this.finish();
//不要在這裡加上這句,否則程式返回時會異常退出。
return true;
}
下一個窗體會接收到主窗體傳送過來的資料:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設定subActivity的佈局
setContentView(R.layout.main2);
intent = new Intent();
/* 取得Intent中的Bundle物件 */
bundle = this.getIntent().getExtras();
/* 取得Bundle物件中的資料 */
String inputStr = bundle.getString("inputStr");
TextView displayText = (TextView)this.findViewById(R.id.displayValue);
displayText.setText("上一個窗體傳遞過來的值為:\t" inputStr);
Button returnButton = (Button) this.findViewById(R.id.returnBtn);
//觸發響應事件
returnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SubActivity.this.setResult(RESULT_OK, intent);
SubActivity.this.finish();
}
});
}
3.如果使用者返回至上一層的話,會將資料返回回來。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RESULT_OK:
//取來自於SubActivity中的資料,並顯示於畫面上
Bundle bundle = data.getExtras();
String inputStr = bundle.getString("inputStr");
inputEditText.setText(inputStr);
break;
default:
break;
}
}
4.儲存退出功能。
//儲存資料,並同時退出該activity或程式
Button saveExitBtn = (Button)this.findViewById(R.id.backSaveButton);
saveExitBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/** 在這裡新增退出時儲存資料的程式碼 **/
//取得活動的preferences物件
SharedPreferences uiState = getPreferences(0);
//取得編輯物件
SharedPreferences.Editor editor = uiState.edit();
//新增值
editor.putString("inputStr", inputEditText.getText().toString());
//儲存提交
editor.commit();
//退出
MainActivity.this.finish();
}
});
5.進入系統,即可載入之前儲存的資料,如下所示:
inputEditText = (EditText)this.findViewById(R.id.editText2);
//剛開始裝載資料
SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
//取得值
String inputStr = settings.getString("inputStr", "");
//賦於值給指定控制元件
inputEditText.setText(inputStr);
6.選單的使用
方式一
建立選單,重寫onCreateOptionsMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
佈局檔案
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@ id/next"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/next"/>
<item
android:id="@ id/about"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/about"/>
<item
android:id="@ id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
選單點選的響應事件,重寫onOptionsSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//得到menuItem的ID項
int item_id = item.getItemId();
switch(item_id){
case R.id.about:
break;
case R.id.next:
//下一個窗體
next();
break;
case R.id.action_settings:
break;
}
return super.onOptionsItemSelected(item);
}
方式二
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//為menu增加內容
menu.add(0, 0 , 0 , R.string.ok);
menu.add(0, 1 , 1 , R.string.back);
return true;
}
點選響應事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int item_id = item.getItemId();
switch (item_id) {
case 0:
//啟動提示框
Toast.makeText(SubActivity.this, item.getTitle(), 3000).show();
break;
case 1:
Intent intent = new Intent();
intent.setClass(SubActivity.this, MainActivity.class);
startActivity(intent);
SubActivity.this.finish();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
截圖如下:
写评论
很抱歉,必須登入網站才能發佈留言。