2014-03-26 40 views
3

即時通訊新的Android和迄今一切順利。直到我進入碎片地形。 在我的應用程序中,我希望用戶單擊活動中的按鈕。按下按鈕到目前爲止我打開一個片段,用戶可以在其中更改設置。 然後,我想關閉,刪除,只要我不再看到片段內的片段。Android。通過從片段中的按鈕調用片段中的方法來關閉片段?

因此:活動「A」,打開片段「a」。 - 做片段中的東西 - 用戶,通過按鈕調用「a」中的Method來關閉「a」。

這裏是我的xml文件的片段「一」:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="145dp" 
    android:orientation="vertical" 
    android:background="#EBDDE2" > 

//took out a seekbar textview and checkbox for now. 

    <Button 
     android:id="@+id/buttonLeaveFragment" 
     style="@style/buttonredblack" 
     android:layout_width="wrap_content" 
     android:layout_height="30dp" 
     android:layout_below="@+id/seekBar_Radius" 
     android:onClick="closeFragment"    <--- this i want to call in the fragment. 
     android:layout_centerHorizontal="true" 
     android:layout_gravity="center" 
     android:layout_marginBottom="10dp" 
     android:text="@string/button_ok" /> 

</RelativeLayout> 

這裏是我的片段「一」活動的java文件:

public class SearchingRadiusFragment extends Fragment implements OnSeekBarChangeListener{ 

     public static String username; 

     public void onAttach(Activity activity){ 
      super.onAttach(activity); 
     } 

     public void onCeate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      setUpLayout(); 

     } 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
      View view= inflater.inflate(R.layout.fragment_radius_searching,container, false); 
      return view; 


     } 

     @SuppressLint("NewApi") 
     public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 

     Bundle bundle = this.getArguments(); 
     if(bundle != null){ 
      username = bundle.getString("username", null); 
     } 
     } 



     public void closeFragment(View v){ 
      ((UserProfileActivity)getActivity()).closeSearchingRadiusFragment(); 
     } 

     } 

在活動現在必要的方法「A」:

public void closeSearchingRadiusFragment(){ 
      SearchingRadiusFragment frag = new SearchingRadiusFragment(); 
      FragmentManager manager = getFragmentManager(); 
      FragmentTransaction transaction = manager.beginTransaction(); 
    transaction.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out); 
      transaction.remove(frag); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 

我在想什麼? 日食給了我一個Illegal.State.Expression。在活動「A」中找不到方法closeFragment()。即使我想使用片段「a」中的一個。

如果我更改方法buttonLeaveFragment調用的名稱:closeSearchingFragment 沒有任何反應,但應用程序也沒有崩潰。

+0

您的設置是否爲新片段?如果是這樣你可以替換片段或添加爲一個子片段 – Libin

+0

沒有我的設置在片段中。我想改變搜索欄,然後用「a」中的ok按鈕提交,並關閉「a」。 – Sakramento

回答

3

你需要用新的片段,以取代可見片段 「A」(例如 「B」)使用:

transaction.replace(R.id.framelayout, fragmentB); 

在點擊按鈕試試這個:

FragmentTransaction transaction=fragmentManager.beginTransaction(); 
transaction.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out);       
transaction.replace(R.id.framelayout, fragmentB); 
transaction.commit(); 

你可見fragmentA將從片段B中取代

+0

工作順利。謝謝! – Sakramento

+0

太棒了!將此答案設置爲最佳答案,謝謝。 ;) –

+0

@ user3457769如果這解決了你的問題,你應該接受它:http://meta.stackexchange.com/a/5235/253846&奧古斯托,這不是設置爲「最佳答案」,而是「回答哪個問題解決了「 解決方案 ;) – Fllo