2017-04-06 89 views
1

我想通过点击一个按钮移动到另一个片段。当前片段名为FirstFragment,目标片段名为AttendanceFragment。当我运行该应用程序时,它刚刚崩溃。 这是当前片段如何从一个片段移动到新的片段?

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class FirstFragment extends Fragment { 


public FirstFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_first, container, false); 

    Button btn1 = (Button) v.findViewById(R.id.btn1); 
    btn1.setOnClickListener(
      new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        AttendanceFragment fragment = new AttendanceFragment(); 
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.register_attendance, fragment); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 
       } 
      } 
    ); 
    return v; 
} 

}

+0

发布异常堆栈跟踪 – Krish

+0

什么是堆栈跟踪? @Krish – Ali

+0

来自android studio中logcat的崩溃日志。 – Krish

回答

3

使接口的代码。

public interface FragmentChangeListener{ 
    public void replaceFragment(Fragment fragment); 
} 

实现这个接口的父活动。

public class MainActivity extends Activity implements FragmentChangeListener { 
     @Override 
     public void replaceFragment(Fragment fragment) { 
      FragmentManager fragmentManager = getSupportFragmentManager();;  
      FragmentTransaction fragmentTransaction = 
      fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(mContainerId, fragment); 
      fragmentTransaction.addToBackStack(fragment.toString()); 
      fragmentTransaction.commit(); 
    } 
} 

呼叫从这样的片段此方法。

//In your fragment - call this method from onClickListener 
public void showOtherFragment(){ 
     Fragment fragment=new NewFragmentName(); 
     FragmentChangeListener listener = (FragmentChangeListener)getActivity(); 
     listener.replaceFragment(fragment); 
} 
0

请仔细阅读Communicating with other Fragments

那里你可以找到的解决方案张贴@Sanjog Shrestha优雅版。您应该在onAttach(Activity activity)注册您回拨,并在onDetach()注销。你最好确定Activity实现你自己定义的接口。

相关问题