2015-12-11 2 views
0

Я использую некоторые фрагменты программным способом в действии. В моем первом фрагменте есть одна кнопка, и когда я нажимаю на эту кнопку, она заменяется на второй фрагмент. Мой второй фрагмент фона на 90% прозрачен, и когда он начинается, я могу видеть кнопку, которая находится в первом фрагменте, а также работает. Я хочу остановиться или сделать что-то, потому что я не хочу видеть первые функции фрагмента и использовать его.Связь между фрагментами Android

Первый фрагмент

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(); 

} 

}

First Fragment

Second Fragment

ответ

0

Вы можете поставить

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

(фрагмент параметра будет экземпляром вашего второго фрагмента)

в вашем OnClick (Просмотреть view) {...}, чтобы изменить фрагмент вместо его добавления.

В следующий раз код для понимания вашей проблемы кстати;)

+0

уже поделился. ;) – JavadKhan

0

Добавить фрагмент макета андроида: кликабельны = «истина». Int его фрагмент пути поймает событие, так что щелчок не будет пойман «основным фрагментом».

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

Дайте android:clickable="true" для второго фрагмента корня макета родителя, когда-либо фрагмент открывает Он ловит событие щелчка корня и игнорировал предыдущие события щелчка.

Second One: Если вы используете замену фрагмента, лучше добавить фрагмент.

getActivity().getSupportFragmentManager().beginTransaction().replace 
     (R.id.YOUR_CONTAINER, 'FragmentObject').addToBackStack("TAG").commitAllowingStateLoss(); 
Смежные вопросы