프로그래밍

안드로이드 스튜디오 Fragment

안드로이드 스튜디오
반응형

프래그먼트는 레이아웃 재사용성을 높이고

프래그먼트는 생명주기가 있음->레이아웃의 집합으로써 재사용이 가능하다

하나의 액티비티에 여러 프래그먼트가 추가, 삭제, 교체될 수 있다.

 

package com.example.fragment;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.ListFragment;

public class ColorlistFragment extends ListFragment {
    private onColorSelectedListener myListener;
    interface onColorSelectedListener{
        void onColorSelected(int color);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        try {
            myListener = (onColorSelectedListener) context;
        }
        catch (ClassCastException e){
            throw new ClassCastException(((Activity) context).getLocalClassName()+"는 onColorSelectedListener를 구현해야 합니다.");
        }
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        List<String> colorList = Arrays.asList("Red","Green","Blue");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,colorList);
        setListAdapter(adapter);
    }

    @Override
    public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
       //프래그먼트에 있는 어댑터 가져오기
        ArrayAdapter<String> adapter = (ArrayAdapter<String>) l.getAdapter();
        String colorString = adapter.getItem(position);
        int color = Color.RED;
        switch (colorString){
            case "Red":
                color = Color.RED;
                break;
            case "Blue":
                color = Color.BLUE;
                break;
            case "Green":
                color = Color.GREEN;
                break;
        }
        if (myListener !=null)
            myListener.onColorSelected(color);
    }
}
package com.example.fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class ColorFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return new View(getActivity());
    }
    public  void setColor (int color){
        getView().setBackgroundColor(color);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/fragment_colorlist"
        android:name="com.example.fragment.ColorlistFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <fragment
        android:id="@+id/fragment_color"
        android:name="com.example.fragment.ColorFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>
package com.example.fragment;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

import java.util.Random;

public class MainActivity extends AppCompatActivity implements ColorlistFragment.onColorSelectedListener{

    private ColorFragment mycolorFragment;

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

        mycolorFragment = (ColorFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_color);
        mycolorFragment.setColor(Color.RED);
    }

    @Override
    public void onColorSelected(int color) {
        mycolorFragment.setColor(color);
    }
}

반응형