티스토리 뷰

  • 프래그먼트 많이 쓰이는 이유
  • 1
    2
    3
    1. 각각의 프래그먼트를 독립적으로 사용해서 다른 액티비티에서도 똑같이 집어넣어 쓸 수 있으므로 매우 편리하다. 이때 인터페이스를 사용해서 다른 액티비티에도 넣을 수 있다.
     
    2. 프래그먼트 엄청나게 많은것들이 있으나, 일일이 찾아 봐야 한다.
    cs
  • Example_Fragment 프로젝트 생성 할것
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. 이미지 3개를 res-drawable 폴더에 넣어 놓을것
 
2. res -> layout -> new -> resource file -> fragment_list.xml 파일 생성
 
3. list.xml파일에 버튼을 3개 추가 할것이다.
 
4. fragment_viewer.xml 파일 생성
- imageView 끌어다가 추가 할것 -> dream01 이미지가 보이도록 할것.
ID: imageView로 설정
 
5. 이제 위의 프래그먼트와 같이 다니는 자바 소스를 추가 할것이다.
app->java -> new -> class java파일 추가
(Name: ListFragment 
Superclass: android.support.v4.app.Fragment )
 
6. 이제 인플레이션을 해야하는데 여기서 override를 한다.
추가해야할것: onCreateView를 추가 한다. -> 여기서 인플레이션을 해야한다. 메모리 객체화를 해야하므로(fragment_list파일을 인플레이션 하기 위해서)
 
7.프래그먼트에서 다른프래그먼트로 접근을 못한다. 그러므로 activity쪽으로 요청을 해야하는데 
MainActivity로 요청하는 코드를 작성 해야한다.
 
8. onImageChage() 메소드를 만들어서 이것을 호출하기 위해서 ListFragment.java에서 소스를 또 작성한다. 호출
cs

<MainActivity.java>
package com.example.example_fragment;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
ListFragment fragment1;
ViewerFragment fragment2;
FragmentManager manager;

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

manager = getSupportFragmentManager();

// fragment1 = new ListFragment();
// fragment2 = new ViewerFragment();
fragment1 = (ListFragment) manager.findFragmentById(R.id.listFragment);
fragment2 = (ViewerFragment) manager.findFragmentById(R.id.viewerFragment);

// xml에 있는 프래그먼트가 있을 경우에는 찾는 메소드가 따로 있다.
// supportFragmentManager manage; 를 사용한다.


}
// 이것을 호출하기 위해 다른 프래그먼트에서 객체를 생성한다음에 호출한다.!

public void onImageChange(int index){

fragment2.setImage(index);
// Viewer 프래그먼트에서 관리를 해보자


//버튼 이벤트 발생시 index에 따라 상황이 달라지게 하려고한다.

}

}
<ListFragment.java>
package com.example.example_fragment;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

/**
* Created by 김관현 on 2017-09-24.
*/

public class ListFragment extends Fragment {
MainActivity activity;
@Override
// 오는 순간
public void onAttach(Context context) {

super.onAttach(context);
activity = (MainActivity) getActivity(); // 찾아서 변수에 할당 (getActivity() 참조할수있다)
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup)inflater.inflate(R.layout.fragment_list,container,false);


/*
왜 여기서 ViewerFragment로 바로 인덱스 값을 주지 않고 메인엑티비티에 있는
ImageChage쪽으로 넘겨주는가? 하면은 바로 -> 프래그먼트는 인텐트를 사용하지 않기 때문에
액티비티에서 넘겨주었다가 액티비티에서 처리를 해주어야 하므로 이렇게 보내주는것이다.

*/
Button button = (Button) rootView.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
activity.onImageChange(0);

}
});

Button button2 = (Button) rootView.findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
activity.onImageChange(1);
}
});

Button button3 = (Button) rootView.findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
activity.onImageChange(2);
}
});
// 여기 프래그먼트에서 다른 프래그먼트(ListFragment)를 접근 못한다. 그러므로 Activity쪽으로 요청을 해야한다
// MainActivity로 요청하는 코드를 작성하러 갈것

return rootView;



}
}
<ViewerFragment.java>
package com.example.example_fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

/**
* Created by 김관현 on 2017-09-24.
*/

public class ViewerFragment extends Fragment {
ImageView imageView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_viewer, container, false);

imageView = (ImageView)rootView.findViewById(R.id.imageView);

return rootView;


}
// 여기서 관리를 한다. 뿌려주는것을
public void setImage(int index){
if(index ==0){
imageView.setImageResource(R.drawable.dream01);
}else if(index ==1){
imageView.setImageResource(R.drawable.dream02);
}else if(index == 2){
imageView.setImageResource(R.drawable.dream03);
}

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

<fragment
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:name ="com.example.example_fragment.ListFragment"
android:id="@+id/listFragment"
/>


<fragment
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:name ="com.example.example_fragment.ViewerFragment"
android:id="@+id/viewerFragment"
/>
</LinearLayout>
<fragment_list.xml>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이미지 1" />

<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이미지 2" />

<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이미지 3" />
</LinearLayout>
<fragment_viewer.xml>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/dream01" />
</LinearLayout>

  • <결과>


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함