【问题标题】:Android relationships between fragments片段之间的Android关系
【发布时间】:2015-12-11 12:46:06
【问题描述】:

我在活动中以编程方式使用了一些片段。我的第一个片段中有一个按钮,当我单击此按钮时,它会替换为第二个片段。我的第二个片段的背景是 90% 透明的,当它启动时,我可以看到位于第一个片段中的按钮,它也作品。我想停下来或做点什么,因为我不想看到第一个片段功能并使用它。

第一个片段

public class RegistrationFirstFragment extends Fragment {

RegistrationSecondFragment rf;

ImageButton btnNewUser,btnNewAgent;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //return super.onCreateView(inflater, container, savedInstanceState);

    View v =inflater.inflate(R.layout.fragment_registration_first,container,false);

    rf = new RegistrationSecondFragment();

    btnNewUser = (ImageButton)v.findViewById(R.id.btnNewUserRegistrationFirstFragment);
    btnNewAgent = (ImageButton)v.findViewById(R.id.btnNewAgentRegistrationFirstFragment);

    btnNewUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity(), "Transaction completed succesfully", Toast.LENGTH_LONG).show();

            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.flRegistrationFirst, rf);

            ft.commit();



        }
    });

    return v;
}

}

第二个片段

public class RegistrationSecondFragment extends Fragment {

RegistrationFirstFragment rtl;

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

    rtl = new RegistrationFirstFragment();
    //return super.onCreateView(inflater, container, savedInstanceState);

    View v =inflater.inflate(R.layout.fragment_registration_second,container,false);

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
   // ft.replace(R.id.flRegistrationFirst, rf);
    ft.remove(rtl);

    ft.commit();

    return v;

}

}

主要活动

public class RegistrationActivity extends AppCompatActivity{

RegistrationFirstFragment fr;


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

    fr = new RegistrationFirstFragment();

    FragmentManager fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();

    ft.add(R.id.flRegistrationFragment,fr);

    ft.commit();

}

}

【问题讨论】:

    标签: android android-fragments button fragment


    【解决方案1】:

    你可以放

            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
    

    (参数片段将是您的第二个片段的实例)

    进入您的 onClick(View view){...} 方法以更改片段而不是添加片段。

    btw 用于理解您的问题的下次代码;)

    【讨论】:

      【解决方案2】:

      添加到片段布局 android:clickable="true"。以他的方式片段将捕获事件,因此“主片段”不会捕获单击。

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:clickable="true" />
      

      【讨论】:

        【解决方案3】:

        为第二个片段根布局父级提供android:clickable="true",当片段打开时它会捕获根的单击事件并忽略以前的单击事件。

        第二个:如果你使用替换片段比添加片段更好。

         getActivity().getSupportFragmentManager().beginTransaction().replace
                (R.id.YOUR_CONTAINER, 'FragmentObject').addToBackStack("TAG").commitAllowingStateLoss();
        

        【讨论】:

          猜你喜欢
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 2016-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多