안드로이드 스튜디오 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);
}
}
반응형
'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드 스튜디오 RecyclerView (0) | 2020.05.10 |
---|---|
안드로이드 스튜디오 프래그먼트 2 (0) | 2020.05.09 |
안드로이드 스튜디오 데이터 저장 (0) | 2020.05.09 |
안드로이드 스튜디오 데이터 저장 2 (SharedPreferences) (0) | 2020.05.03 |
안드로이드 스튜디오 데이터 저장하기 (SharedPreferences) (0) | 2020.05.03 |