2016-07-29 105 views
0

我有2个活动 - MainActivity和MainActivity2。当从活动2片段返回到活动1片段时,popBackStack()不起作用片段

MainActivity具有2个片段 MainActivity2具有1个片段

所以我从MainActivity_Frag_one数据传递到MainActivity_Frag_two。 当我点击设备后退按钮和MainActivity_Frag_two中的蓝色按钮时,通过返回MainActivity_Frag_one可以很好地工作。

在那之后,我使用传递从MainActivity_Frag_two数据MainActivity2_Frag_one意图

当点击当我点击设备的后退按钮它通过返回MainActivity_Frag_two但蓝色按钮,效果很好不工作(没有效果,还没有错误显示)。

我可以知道哪部分出了问题吗?

enter image description here MainActivity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager manager=getSupportFragmentManager(); 
    FragmentTransaction transaction=manager.beginTransaction(); 
    MainActivity_Frag_one MainActivity_Frag_one=new MainActivity_Frag_one(); 
    transaction.add(R.id.activity_one_container,MainActivity_Frag_one); 
    transaction.commit(); 
} 

MainActivity_Frag_one.java

public class MainActivity_Frag_one extends Fragment { 

EditText get_text; 
Button get_button; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_main_activity__frag_one,container,false); 

    get_text=(EditText)rootView.findViewById(R.id.input_name); 
    get_button=(Button)rootView.findViewById(R.id.submit_button); 

    get_button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 


      FragmentManager manager=getFragmentManager(); 
      FragmentTransaction transaction=manager.beginTransaction(); 
      Bundle bundle=new Bundle(); 
      bundle.putString("message", get_text.getText().toString()); 
      MainActivity_Frag_two fragobj=new MainActivity_Frag_two(); 
      fragobj.setArguments(bundle); 
      transaction.replace(R.id.activity_one_container,fragobj); 
      transaction.addToBackStack("zzz"); 
      transaction.commit(); 

     } 

    }); 

    return rootView; 
} 
} 

MainActivity_Frag_two.java

public class MainActivity_Frag_two extends Fragment { 

ImageView get_button; 
Button get_to_second_activity; 
String strtext; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_main_activity__frag_two,container,false); 
    TextView display_text=(TextView)rootView.findViewById(R.id.display_text); 
    strtext=getArguments().getString("message"); 
    display_text.setText(strtext); 

    get_button=(ImageView)rootView.findViewById(R.id.back_button); 
    get_button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 

      getFragmentManager().popBackStack(); 

     } 
    }); 

    get_to_second_activity=(Button)rootView.findViewById(R.id.to_second_activity); 
    get_to_second_activity.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 
      Intent intent = new Intent(getActivity(),MainActivity2.class); 
      intent.putExtra("Check","data from mainactivity_frag_two is : "+strtext); 
      startActivity(intent); 

      FragmentManager manager=getFragmentManager(); 
      FragmentTransaction transaction=manager.beginTransaction(); 
      transaction.addToBackStack(""); 
      transaction.commit(); 
     } 
    }); 
    return rootView; 
} 
} 

MainActivity2.java

public class MainActivity2 extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 

    FragmentManager manager=getSupportFragmentManager(); 
    FragmentTransaction transaction=manager.beginTransaction(); 
    MainActivity2_Frag_one MainActivity2_Frag_one=new MainActivity2_Frag_one(); 
    transaction.add(R.id.activity_two_container,MainActivity2_Frag_one); 
    transaction.commit(); 

} 
} 

MainActivity2_Frag_one.java

public class MainActivity2_Frag_one extends Fragment { 
TextView get_display; 
ImageView get_button; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_main_activity2__frag_one,container,false); 

    get_display=(TextView)rootView.findViewById(R.id.display); 
    String data1=getActivity().getIntent().getExtras().getString("Check"); 
    get_display.setText(data1); 

    get_button=(ImageView)rootView.findViewById(R.id.back_to_previous_frag); 
    get_button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 

      getFragmentManager().popBackStack(); 

     } 
    }); 
    return rootView; 
} 
} 

回答

0

要返回到以前的活动,您不需要从后面栈中弹出的片段。你可以调用finish()。

在你MainActivity2_Frag_one.java

替换此:

get_button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 

      getFragmentManager().popBackStack(); 

     } 
    }); 

get_button.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v){ 

      getActivity().finish(); 

     } 
    }); 

原因是popBackStack()即可在同一活动中使用。

+0

bro!有用!谢谢你 – gosulove