Android窗口传值与保存退出


   在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;
	}

 

布局文件



    

       
    
          

 

菜单点击的响应事件,重写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);
	}


截图如下:

你可能感兴趣的:(Android智能手机开发)