Android系统。通过从片段中的按钮调用片段中的方法来关闭片段?

时间:2014-03-26 23:14:56

标签: android button fragment

我是Android新手,到目前为止一切都很顺利。直到我进入碎片地形。 在我的应用程序中,我希望用户单击活动中的按钮。到目前为止按下了按钮,我打开一个片段,用户可以在其中更改设置。 然后我想关闭,删除,只要我不再看到片段,从片段内。

所以:活动“A”,打开片段“a”。   - 做碎片中的东西 -     用户,通过按钮调用“a”中的方法,关闭“a”。

这是我的xml文件到片段“a”:

<?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>

这是我的片段“a”活动的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();
      }
我错过了什么? eclipse给了我一个Illegal.State.Expression。说活动“A”中找不到方法closeFragment()。即使我想使用片段“a”中的那个。

如果我更改方法按钮的名称,则LeaveFragment正在调用:closeSearchingFragment 没有任何事情发生,但应用程序也不会崩溃。

1 个答案:

答案 0 :(得分:3)

您需要更换可见的片段&#34; A&#34;使用:

使用新片段(例如&#34; B&#34;)
  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();

您的可见片段A将从fragmentB

中替换