문제

조각간에 탐색을 시도했습니다.새로운 조각이 작동하는 NewFragment.java가 있습니다.내 문제는 다음과 같습니다 :

onClickListener를 올바르게 실행하려면 어떻게합니까?

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});
.

fyi : 이것은 조각 내부에서 (나는 그 중요한지 모른다)

도움이 되었습니까?

해결책

클릭 리스너 함수에 다음 코드를 추가합니다.

NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
             .replace(R.id.Layout_container, nextFrag, "findThisFragment")
             .addToBackStack(null)
             .commit();
.

문자열 "findThisFragment"를 사용하여 필요한 경우 나중에 조각을 찾을 수 있습니다.

다른 팁

이것은 @ narendra의 코드의 코드가 더 많이 설명되었습니다.

먼저 두 번째 조각의 인스턴스가 필요합니다.그런 다음 FragmentManager와 FragmentTransaction의 대상이 있어야합니다.전체 코드는 아래와 같습니다.

Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
.

이것이 효과가 있습니다.때로는 getFragmentManager () 대신 getSupportFragmentManager ()를 얻을 수 있습니다.

새 조각을 열고 활동 참조를 조각에 전달하고 Fragment 호출 내부의 일부 이벤트에서 활동 참조를 전달하는 작업 내부 기능을 작성해야합니다.

@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    UserResult nextFrag= new UserResult();
    this.getFragmentManager().beginTransaction()
    .replace(R.id.content_frame, nextFrag, null)
    .addToBackStack(null)
    .commit();  
}
.

이를 사용하십시오.

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
.

 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();
.

정확히, R.id.viewpagerId는 현재 클래스 레이아웃에 크레타가 됨, 호출시 새로운 조각이 자동으로 침투됩니다.

@narendra 솔루션에 추가 ...

중요 : 조각으로 작업 할 때 탐색은 호스트 동력과 밀접한 관련이 있으므로 호스트 활동에서 해당 프래그먼트 클래스를 구현하지 않고 조각에서 조각으로 점프 할 수는 없습니다.

샘플 :

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

또한 호스트 활동에 다음 재정의 기능이 있는지 확인하십시오.

@Override public void onFragmentInteraction(Uri uri) {} . 희망이 도움이 ...

잘 문제는 답변에서 코드를 사용했지만 교체가 실행 된 후에 첫 번째 레이어는 여전히 열리고 열린 조각 아래에서 기능을 수행했습니다.내 해결책은 Simmple이었습니다.

를 추가했습니다.
.remove(CourseListFragment.this)
.

CourseListFragment는 내가 닫으려는 조각에 대한 클래스 파일입니다. (MainActivity.java,하지만 특정 섹션 (네비게이션 서랍 조각), 더 이상 당신에게 더 의미가있는 경우) 그래서 우리 코드는 지금 이처럼 보입니다 :

LecturesFragment nextFrag= new LecturesFragment();

                    getActivity().getSupportFragmentManager().beginTransaction()
                            .remove(CourseListFragment.this)
                            .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                            .addToBackStack(null)
                            .commit();
.

그리고 그것은 나를 위해 매력처럼 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top