Android 시작 튜토리얼 | 프래그먼트(로딩 방법 및 통신)

여기에 이미지 설명을 삽입하세요.

조각 로딩 방법

로드하는 방법은 두 가지가 있습니다

  • xml 파일에 등록
  • Java 코드로 로드

XML에 등록 :

fragment_demo.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:id="@+id/main_fragment_up"
        android:name="com.rust.fragment.FirstFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <fragment
        android:id="@+id/main_fragment_bottom"
        android:name="com.rust.fragment.SecondFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

com.rust.fragment.SecondFragment즉, Fragment 하위 클래스가 메서드를 SecondFragment.java재정의 하고 정의된 뷰를 반환합니다.onCreateView

활동에 직접로드하십시오.

setContentView(R.layout.fragment_demo);

Java 코드로 로드

① Fragment xml 레이아웃 파일 준비 ② Fragment에서 상속된 새 클래스를 생성하고 이 클래스에서 Fragment 레이아웃 파일을 찾습니다. ③ Activity에서 FragmentManager를 사용하여 Fragment를 작동합니다. ④ 커밋하는 것을 잊지 마세요.

먼저 레이아웃 파일을 맞춤설정하세요.fragment_first.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"
    android:background="#0011ff" >
<!-- <Button
    android:id="@+id/btn_fragment1_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_fragment1"
    android:textSize="16sp"
       />
<EditText
    /> -->
</LinearLayout>

FirstFragment.javaFragment에서 상속되는 새 클래스를 만듭니다 . 복사 onCreateView방법. 이 메서드 에서는 onCreateView조각에 대한 컨트롤을 작동할 수 있습니다.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
    
        View rootView = inflater.inflate(R.layout.fragment_first, container,false);
//    fragment_first是自定义好的布局
//    如果此Fragment上放了控件,比如Button,Edittext等。可以在这里定义动作
  btn_fragment1_send = (Button) rootView.findViewById(R.id.btn_fragment1_1);
//...
        return rootView;
    }

activity_main.xmlFramelayout을 사용하여 위치를 차지하는 등 Fragment에 대한 위치를 준비합니다 .

    <FrameLayout
        android:id="@+id/layout_container1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" >
    </FrameLayout>

에서는 MainActivity.java먼저 FragmentManager를 가져온 다음 FragmentTransaction을 가져옵니다. Fragment의 추가, 삭제 등의 작업은 FragmentTransaction을 통해 완료됩니다.

f1 = new FirstFragment();    //    获取实例
f2 = new SecondFragment();    //
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.layout_container1,f1);    //    添加
fragmentTransaction.replace(R.id.layout_container1,f1);    //    替换
// 或者也可以写成
fragmentTransaction.replace(R.id.layout_container1,new FirstFragment());
//              fragmentTransaction.addToBackStack(null);   //添加到返回栈,这样按返回键的时候能返回已添加的fragment
fragmentTransaction.commit();    //别忘了commit
//    移除操作 getFragmentManager().beginTransaction().remove(f1).commit();

XML 등록에 비해 코드 로딩이 더 유연합니다. 개인적으로 저는 동적 로딩을 선호합니다.

프래그먼트와 활동 간의 협력

Activity가 먼저 실행된 onResumeonResume현재 Fragment가 실행되고, 현재 Fragment가 교체되고, 다시 교체될 때 일부 상태가 다시 초기화되지 않습니다. 교체가 실행되면 조각의 선언 주기가 다시 실행됩니다. 안전한 접근 방식은 onCreateView에서 필요한 변수를 초기화하는 것입니다. 예를 들어 일부 상태 값을 재설정합니다. 여러 조각 간에 전환할 때는 특별한 주의가 필요합니다.

조각 간 통신

Fragment의 Java 파일에서 getActivity()이를 호출하는 활동을 가져온 다음 통신할 다른 Fragment를 찾는 데 사용할 수 있습니다.

getActivity().getFragmentManager().findFragmentById(R.id.fragment_list);

그러나 이 결합도는 너무 높아 후속 수정 작업에 불편합니다.

프래그먼트와 그에 연결된 활동 간의 통신은 활동에 의해 완료되어야 하며 여러 프래그먼트 간에 직접 통신할 수는 없습니다.

Fragment와 연결된 Activity 간의 통신 방법:
  • 이벤트를 시작하는 조각에서 인터페이스를 정의하고 인터페이스에서 메서드를 선언합니다.
  • onAttach 메소드에서 이 인터페이스를 구현하려면 활동이 필요합니다.
  • 활동에서 이 메서드 구현

예를 들어 두 개의 프래그먼트가 하나의 활동에 배열되어 있으며 이들 사이의 통신은 활동에 따라 다릅니다.

암호:ListStoreActivity.java NewItemFragment.java ListStoreFragment.java

레이아웃 파일은 다음과 같습니다liststore.xml new_item_fragment.xml

레이아웃 파일 준비 :

liststore.xmlLinearLayout을 사용하여 각각 2개의 조각 파일을 가리키는 2개의 조각을 배치 new_item_fragment.xml하고 EditText와 버튼을 나란히 배치합니다.

ListStoreFragment.java앞서 정의한 인터페이스 사용

public class ListStoreFragment extends ListFragment{
    
    
/// 继承自ListFragment,已经封装好了listview
/// 不需要自己写ListView了
}

NewItemFragment.java

/**
 * 声明一个接口,定义向activity传递的方法
 * 绑定的activity必须实现这个方法
 */
    public interface OnNewItemAddedListener {
    
    
        public void newItemAdded(String content);
    }
    private OnNewItemAddedListener onNewItemAddedListener;
    private Button btnAddItem;
    /*复写onAttach方法*/
    @Override
    public void onAttach(Activity activity) {
    
    
        super.onAttach(activity);
        try {
    
    
            onNewItemAddedListener = (OnNewItemAddedListener) activity;
        } catch (ClassCastException e){
    
    
            throw new ClassCastException(activity.toString() + "must implement OnNewItemAddedListener");
        }
    }

ListStoreActivity.java기본 보기를 로드합니다 liststore.xml.

두 조각은 다음을 통해 ListStoreActivity통신합니다.

onCreate 메소드에서 ListStoreFragment 인스턴스를 획득하고 newItemAdded 메소드를 재정의하고 여기에 비즈니스 로직을 추가합니다.

public class ListStoreActivity extends Activity implements OnNewItemAddedListener{
    
    

    private ArrayList<String> data;
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.liststore);
        data = new ArrayList<String>();
        // 把data装入adapter中
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        // ListFragment并不需要再定义一个listview 
        ListStoreFragment listStoreFragment = (ListStoreFragment) getFragmentManager().findFragmentById(R.id.fragment_listview);
        listStoreFragment.setListAdapter(adapter);
    }

    @Override
    public void newItemAdded(String content) {
    
    
        //  复写接口中的方法,业务代码在这里实现
        if(!content.equals("")) {
    
    
            data.add(content);
            adapter.notifyDataSetChanged();
        }
    }
}

단점은 결합도가 매우 높다는 것이다.

Fragment와 Activity 간의 다양한 통신 방법

  • 활동은 핸들러를 Fragment에 전달합니다.
  • 방송
  • 이벤트버스
  • 인터페이스 정의

위에서 언급한 방법 외에도 Activity와 Fragment 간에 ViewModel을 공유하여 통신할 수도 있습니다.

마지막으로 공유해 보세요

[텐센트 기술팀 제작] Android 처음부터 익히기까지, Android Studio 설치 튜토리얼 + Android 기본 튜토리얼 전체 세트

Android 프로그래밍 입문 튜토리얼

Java 언어 기초 입문부터 익히기까지

여기에 이미지 설명을 삽입하세요.

Kotlin 언어 기초 입문부터 숙달까지

여기에 이미지 설명을 삽입하세요.

Android 기술 스택은 처음부터 익숙해지기까지

여기에 이미지 설명을 삽입하세요.

Android Jetpack에 대한 종합 학습

여기에 이미지 설명을 삽입하세요.

초보자의 경우 안드로이드 스튜디오 설치가 어려울 수 있으니, 다음 영상을 통해 단계별 설치 및 실행 방법을 학습하실 수 있습니다.

Android 스튜디오 설치 튜토리얼

여기에 이미지 설명을 삽입하세요.

자바 학습 단계에서는 이 단계에서는 영상 학습에 집중하고, 도서 확인과 공백 메우기로 보완하는 것이 좋습니다. 주로 책을 위주로 공부한다면 책의 설명을 바탕으로 코드를 입력하고, 누락된 부분을 확인하고 부족한 부분을 채워줄 수 있는 영상을 가르쳐주는 방식으로 보충할 수 있습니다. 문제가 발생하면 Baidu에 가면 일반적으로 많은 사람들이 초급 문제에 직면하고 더 나은 답변을 제공합니다.

4가지 주요 컴포넌트 사용법, 서비스 생성 방법, 레이아웃 방법, 간단한 커스텀 뷰, 애니메이션, 네트워크 통신 및 기타 공통 기술 등 기본 지식을 숙지해야 합니다.

제로 기반 튜토리얼의 전체 세트가 준비되어 있습니다. 필요한 경우 아래 QR 코드를 추가하여 무료로 받을 수 있습니다.

기본 Android 튜토리얼의 전체 세트

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

Supongo que te gusta

Origin blog.csdn.net/Android23333/article/details/132563179
Recomendado
Clasificación