프래그먼트도 메소드와 비슷하게 액티비티의 요구에 따라 조금씩 다르게 동작하기 위해 인수를 받아 들인다.
이때 프래그먼트의 인수 저장을 위해 아규먼트를 사용하며 다음 두 메소드로 아큐먼트를 설정하거나 얻는다.
void setArguments(Bundle args)
Bundle getArguments()
아규먼트는 프래그먼트 내부에 저장되는 Bundle 객체이며 주로 프래그먼트의 생성에 관련된 정보를 저장한다.
그래서 아규먼트는 액티비티에 프래그먼트를 부착하기 전에만 저장할 수 있다.
다음은 아규먼트를 사용하여 정수를 저장하는 예제이다.
activity_fragment_argument.xml
<LinearLayout 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"
android:orientation="vertical"
>
<EditText
android:id="@+id/startnum"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="5"
/>
<Button
android:id = "@+id/btnadd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="Add"
/>
<FrameLayout
android:id="@+id/frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
counterfragment.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:background="#ffff00"
>
<TextView
android:id="@+id/txtcounter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff0000"
android:textSize="40sp"
android:text="0"
/>
<Button
android:id="@+id/btnincrease"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Increase"
/>
</LinearLayout>
FragmentArgument.java
package com.example.ch20_fragmentargument;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class FragmentArgument extends Activity {
EditText mStartNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_argument);
mStartNum = (EditText)findViewById(R.id.startnum);
}
public void mOnClick(View v){
switch(v.getId()){
case R.id.btnadd:
FragmentManager fm = getFragmentManager();
//트랜잭션 시작
FragmentTransaction tr = fm.beginTransaction();
int start = Integer.parseInt(mStartNum.getText().toString());
CounterFragment cf = CounterFragment.newInstance(start);//새로운 인스턴스 가져옴
tr.add(R.id.frame, cf, "counter");
tr.commit();
break;
}
}
public static class CounterFragment extends Fragment{
//인스턴스 만들고 아규먼트에 값을 넣어두는 메소드
public static CounterFragment newInstance(int start){
CounterFragment cf = new CounterFragment();
Bundle args = new Bundle();
args.putInt("start", start);
cf.setArguments(args);
return cf;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View root = inflater.inflate(R.layout.counterfragment, container,
false);
Button btnIncrease = (Button)root.findViewById(R.id.btnincrease);
final TextView textCounter = (TextView)root.findViewById(R.id.btnincrease);
int start = 0;
Bundle args = getArguments();//여기서 아까 저장한 값을 가져옴
if(args != null){//값이 있다면
start = args.getInt("start");//start 태그의 값을 취함
}
textCounter.setText(Integer.toString(start));//버튼의 텍스트를 바꿈
//버튼클릭 리스너 등록
btnIncrease.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
int count = Integer.parseInt(textCounter.getText().toString());
textCounter.setText(Integer.toString(count + 1));
}
});
return root;
}
}
}
실행 화면
에디트에 적당한 정수를 입력한 후 Add 버튼을 누르면 아래쪽의 빈 프레임에 프래그먼트를 추가하되 에디트에 입력한 시작값을 전달받아 동작한다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 액션바 기초 (0) | 2015.09.20 |
---|---|
안드로이드 - 이클립스에서 안드로이드 SDK MANAGER가 안보일때 (0) | 2015.09.19 |
안드로이드 - ListFragment 만들기 (0) | 2015.09.13 |
안드로이드 - 백(Back) 버튼을 눌렀을 때 이전 프래그먼트로 복귀하기 (0) | 2015.09.13 |
안드로이드 - FragmentManager를 이용한 프래그먼트 추가, 삭제, 교체, 숨김 (0) | 2015.09.12 |
안드로이드 - 프래그먼트 상태 저장하기 (0) | 2015.09.08 |
안드로이드 - 한 화면에 여러 개의 프래그먼트 만들기 (0) | 2015.09.08 |
안드로이드 - 프래그먼트 사용 간단 예제 (0) | 2015.09.08 |