Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기

 

환경 : Eclipse Mars, Android 4.2.2

 

안드로이드에서는 셋팅정보를 쉽게 저장하고 관리할수 있는 Preference 기능이 있습니다. DB 에 저장하는 것이 아니라 안드로이드에서 제공하는 별도의 공간에 저장되는 것이죠. 처리방식은 xml 로 관리하며 파일로 저장됩니다. 그리고 HashMap 처럼 key - value 의 쌍으로 저장됩니다.

 

이번에 개발할 예제는 PreferenceActivity 를 이용해서 클래스를 만듭니다. 그리고 안드로이드에서 제공하는 Preference 위젯중 CheckBoxPreference 추가해서 옵션 페이지를 만듭니다. 옵션페이지에서 체크한 결과값을 메인페이지에서 가져와 동일하게 셋팅할 것입니다.

 

Preference 에 사용할 XML 을 만들기 위해 오른마우스를 누릅니다. 그리고 [Android XML file] 을 선택합니다. 그럼 xml 리소스를 만들수 있는 위자드가 시작됩니다 

안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기

 

xml작성을 위한 대화상자 첫번째 화면에서 Resource Type Preference 선택합니다. 그럼 추가할수 있는 요소들이 나오게 됩니다. 그중 PreferenceScreen 을 선택합니다. 옵션화면을 구성할 때 가장 많이 쓰이는 요소 입니다 

안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기

 

1. PreferenceActivity 클래스 만들기

 

PreferenceActivity 를 이용해서 만든 클래스 입니다. PreferenceActivity 에서는 addPreferencesFromResource 함수를 사용해서 옵션으로 사용할 xml 파일을 추가할수 없습니다. 그래서 PreferenceFragment 클래스를 상속해서 만든 클래스에 xml 을 추가해서 만든후 onCreate 에서 사용합니다 

안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기

 


import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

public class PreferenceSetting extends PreferenceActivity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getFragmentManager()
				.beginTransaction()
				.replace(android.R.id.content,
						new MyPreferenceFragment()).commit();
	}
	
	// PreferenceFragment 클래스 사용
	public static class MyPreferenceFragment extends
			PreferenceFragment {
		@Override
		public void onCreate(final Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			addPreferencesFromResource(R.xml.setting_default);
		}
	}
}

 

PreferenceActivity 에서 사용하는 xml 의 내용입니다. 여기에서는 CheckBoxPreference 를 사용하였습니다.

 

setting_default.xml

 

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <CheckBoxPreference
        android:defaultValue="true"
        android:key="checkbox"
        android:summary="@string/opt_setting"
        android:title="Checkbox" />
</PreferenceScreen>

 

2. MainActivity 클래스 만들기  

 

이제 PreferenceActivity 를 상속받아 만든 클래스를 사용하는 메인화면 소스입니다. 메인화면에 보시면 버튼이 하나 있는데 클릭하시면 옵션 셋팅 화면으로 이동합니다. 그리고 onResume() 함수에서는 PreferenceActivity 에서 xml 에 저장한 값을 SharedPreferences 이용해서 가져온 후 메인화면에 있는 체크박스에 셋팅합니다. 그럼 옵션화면에서 저장한 값과 동일한 결과를 보여주게 되겠죠.

안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기

 

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

public class MainActivity extends Activity {

	private CheckBox checkBox;

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

		Button btnRefer = (Button) findViewById(R.id.setpreference);
		checkBox = (CheckBox) findViewById(R.id.checkbox);

		btnRefer.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View arg0) {
				startActivity(new Intent(MainActivity.this,
						PreferenceSetting.class));
			}
		});
	}

	@Override
	protected void onResume() {
		super.onResume();
		Toast.makeText(this, "onResume", Toast.LENGTH_LONG).show();

		SharedPreferences setRefer = PreferenceManager
				.getDefaultSharedPreferences(this);
		checkBox.setChecked(setRefer.getBoolean("checkbox", true));
	}
}

 

메인 activity 에 쓰인 전체 xml 소스 입니다. 버튼은 옵션셋팅화면으로 이동하는데 쓰이며 CheckBox 는 옵션에서 셋팅한 결과와 동일하게 셋팅하기 위한 컨트롤 입니다.

 

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="#3F0099"
        android:paddingBottom="@dimen/abc_action_bar_icon_vertical_padding"
        android:paddingTop="@dimen/abc_action_bar_icon_vertical_padding"
        android:text="@string/hello"
        android:textColor="#FFFFFF" />
	
    <Button
        android:id="@+id/setpreference"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_setprefer" />

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/chk_setting" />

</LinearLayout>
반응형
Posted by 녹두장군1
,