Fragment에서 button 점프 및 DrawLayout Framelayout 충돌 클릭

자세히 보기
[주제에 직접 삽입]:
이때 당신은 반드시 1개 이상의fragment를 세웠을 거라고 믿습니다. 단지 전환 조작으로 어떻게 갑니까?
희망하는 것은fragmentA에서 무엇을 클릭하면fragmentB로 전환할 수 있는지
하지만 모든 Fragment는 해당 바인딩을 호스팅하는 Activity입니다.
스스로 전환하려면 어림없어!전환하려면 먼저 맏형 Activity의 동의를 물어본 다음에 맏형이 전환해야 한다!
이 글은 제 블로그'Fragment'의 장과 절, 맏형과 동생의 이야기를 추천할 줄 모릅니다.
그 다음에 우리의 논리는 전환이 필요한 모든 Fragment가 맏형에게 보고서를 써서 전환하는 것이다. 이것은 비교적 간단한 방법인 것 같다.
또한 옳다. 단지 모든fagment가 쓴 보고서는 이곡동공일 뿐이다. 어떻게 작업량을 줄일 것인가?
 
[추상류와 무엇이든 맏형에게 맡겼으면 좋겠다.]
일단 Fragment에서 할 일을 볼게요.
view=View.inflate(main, R.layout.create_frame, null);

모든fragment가 해야 할 일은 추상적인 유형을 만들고 추상적인 방법을 써서 이 중복된 방법을 대체한다.
코드는 다음과 같습니다.
package com.example.testdrawerlayoutleft;

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.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public abstract class BaseFragment extends Fragment {

	
	public Main main;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		 
		
		 main = (Main) getActivity();
	        View view = initView();
		return view;
	}
	 public abstract View initView();
}

그리고 모든 fagment로 하여금 이 추상 클래스를 계승하게 한다.
package com.example.testdrawerlayoutleft;

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.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class fragment_content extends BaseFragment {

	private View view;
	private Button create;
	
	

	@Override
	public View initView() {
	
		// TODO Auto-generated method stub
		if(view==null){
			view=View.inflate(main, R.layout.fragment_content, null);
		 create=(Button)view.findViewById(R.id.creat_bt);
		    create.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
				//	Toast.makeText(main, "sdsd", 100).show();
					main.switchFragment("content", "create");
	                 
				}
			});
		}
		return view;
	}
}

여기에 클릭을 설정하면 이 단추는 다른 Fragment로 이동합니다
그러면 우리 Activity는 다음과 같이 쓸 수 있습니다.
 public void switchFragment(String fromTag, String toTag) {
		 Fragment from = fragmentManager.findFragmentByTag(fromTag);
	        Fragment to = fragmentManager.findFragmentByTag(toTag);
	    
	      
		    if (mCurrentFragment != to) {
	            mCurrentFragment = to;
	           
	            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
	            if (!to.isAdded()) {//         Activity    
	                fragmentTransaction.hide(from).add(R.id.content_frame, to).commit();
	            } else {
	            	fragmentTransaction.hide(from).show(to).commit();
	            }
	        }
	    }
	/**

【주의의 구덩이】:
Fragment Manager 객체는 처음 만든 후 계속 사용할 수 있습니다.
하지만!!!!!FragmentTransactionfragmentTransaction은 매번 추가를 전환할 때 다시 한 번 설명해야 합니다. 그렇지 않으면
붕괴되지 않는 상상이 생겨서 블로그를 많이 봤어요. 사용할 때 매번 사용해야 해요. 성명할 때마다 구체적인 원리는 몰라요. 원리를 찾아서 알려드릴게요. 그런데 이 구덩이!!부디 신중히 밟아라
 
 
여기까지 거의 다 끝났어요.
마지막으로 Main Activity에 디스플레이 코드만 추가하면


		fragmentManager = getFragmentManager();
		fragmentTransaction = fragmentManager
				.beginTransaction();
		fragmentTransaction.add(R.id.content_frame,fragment_content, "content").add(R.id.content_frame,Create_frame, "create").hide(Create_frame).commit();
	

main의 xml 파일은 다음과 같습니다.
   


    
     

     
      

    

    

     
      

    

    

    
    

   


  

마지막:
바로 DrawLayout을 사용할 때 존재하는 Framelayout 충돌입니다. 왜 DrawLayout에 FrameLayout이 필요한지 모르겠지만 Fragment에 필요한 디스플레이 contianer는 DrawLayout이 같은 직접적인 충돌을 사용하면 안 됩니다. 해결 방법은 간단합니다. FrameLayout을 디스플레이 레이아웃으로 하나 더 쓰면 해결이 편리해 보입니다.그러나 당시 이 문제를 발견했을 때는 이틀이 지났고 큰 구덩이급이었다.
예시 코드 데모는 아래에서 다운로드해서 사용하십시오. 질문이 있으면 평론으로 연락하십시오.
4
  • 치아찾기v1.zip (1.3 MB)

  • 4
  • 다운로드: 0
  • 좋은 웹페이지 즐겨찾기