Объяснение: У меня есть два фрагмента, где я заменяю фрагмент один над другим. Мое имя фрагмента - FourFragment и OneFragment. Оба имеют собственный макет.Как я могу отключить интерфейс фрагмента, когда другой фрагмент открыт над одним в android?
Требование:
Мое требование я установить TextView на панель и у меня есть navigationView в моем MainActivity. Пока мое приложение запускается, загружается фрагмент по умолчанию, например. OneFragment это правильно. Теперь, когда я нажимаю на текстовое поле панели инструментов, он открывает новый фрагмент, например. FourFragment. Fourfragment покрывает некоторую часть экрана, а остальная часть части четырехфрагментов прозрачна. так что я могу прозрачно видеть предыдущий пользовательский интерфейс фрагмента, например. OneFragment.I сделал все.
Но проблема в том, что четыре фрагмента загружаются поверх Onefragment. Но пользовательский интерфейс одного фрагмента можно щелкнуть, когда загружается четыре фрагмента.
Я хочу, чтобы мой однофрагмент был виден, а четыре фрагмента загружены по одному фрагменту, но пользовательский интерфейс односторонней операции не может быть нажат, когда открыт четыре фрагмента.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.millu.navidemo.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20sp"
android:text="TextView"
android:gravity="center"
android:clickable="true"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize">
</FrameLayout>
<FrameLayout
android:id="@+id/dialog_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize">
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
TextView textView;
boolean flag=false;
FrameLayout dialog_frame;
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
if(savedInstanceState==null){
MenuItem item=navigationView.getMenu().getItem(0);
onNavigationItemSelected(item);
}
textView=(TextView)findViewById(R.id.textView);
dialog_frame=(FrameLayout)findViewById(R.id.dialog_frame);
final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
FourFragment ff=null;
if(!flag) {
Toast.makeText(MainActivity.this, "Clicked!!!!", Toast.LENGTH_SHORT).show();
ff= new FourFragment();
ft.replace(R.id.dialog_frame,ff);
ft.addToBackStack(null);
ft.commit();
dialog_frame.setVisibility(View.VISIBLE);
flag=true;
}
else{
Toast.makeText(MainActivity.this, "else", Toast.LENGTH_SHORT).show();
dialog_frame.setVisibility(View.GONE);
ft.remove(ff);
ft.commit();
OneFragment oneFragment=new OneFragment();
ft.replace(R.id.container,oneFragment);
ft.commit();
flag=false;
}
}
});
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Fragment fragment=null;
switch (item.getItemId()){
case R.id.nav_camera:
fragment=new OneFragment();
break;
}
if(fragment!=null){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container,fragment);
ft.commit();
}
else
{
Toast.makeText(MainActivity.this, "Fragment is null!!", Toast.LENGTH_SHORT).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
OneFragment.java
public class OneFragment extends Fragment {
View rootView;
TwoWayView twoWayView;
List<Days> days_list;
String[] str_arr={"A","B","C","D","E","F","G","H"};
int[] img_arr={R.drawable.ic_menu_send,R.drawable.ic_menu_gallery,R.drawable.ic_drawer,R.drawable.ic_menu_camera,
R.drawable.ic_menu_manage,R.drawable.ic_menu_share,R.drawable.ic_menu_slideshow};
Button button;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootView=inflater.inflate(R.layout.fragment_one, container, false);
twoWayView=(TwoWayView)rootView.findViewById(R.id.twoWayView);
button=(Button)rootView.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), "Button clicked!!1", Toast.LENGTH_SHORT).show();
}
});
days_list=new ArrayList<>();
for(int i=0;i<str_arr.length-1;i++){
Days d=new Days(img_arr[i],str_arr[i]);
days_list.add(d);
}
DayAdapter adapter=new DayAdapter(getContext(),days_list);
twoWayView.setAdapter(adapter);
twoWayView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getContext(), "One:"+days_list.get(i).getName(), Toast.LENGTH_SHORT).show();
}
});
return rootView;
}
}
FourFragment.java
public class FourFragment extends Fragment {
View rootView;
TwoWayView twoWayView;
List<Days> days_list;
String[] name={"Milan","Sagar","Mithun","Brijesh","Ravi","Vishal","Nikhil"};
public FourFragment(){}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootView=inflater.inflate(R.layout.fragment_dialog, container, false);
twoWayView=(TwoWayView)rootView.findViewById(R.id.twoWayView);
days_list=new ArrayList<>();
for(int i=0;i<name.length;i++){
Days days=new Days();
days.setName(name[i]);
days_list.add(days);
}
DayAdapter dayAdapter=new DayAdapter(getContext(),days_list);
twoWayView.setAdapter(dayAdapter);
twoWayView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getContext(), "One:"+days_list.get(i).getName(), Toast.LENGTH_SHORT).show();
}
});
return rootView;
}
}
Примечание. Я хочу, чтобы один фрагмент был прозрачным, когда четырефрагмент был виден после нажатия на текстовое изображение, которое установлено на панели инструментов.
Пожалуйста, помогите решить эту проблему. Thanx заранее
Попробуйте сохранить rootView в закрытом поле и добавить общедоступный метод, который вызывает метод setEnabled (boolean). –
Как и в каком фрагменте я установил эту вещь? –
Возможно, попробуйте clickable = false на Onefragment, когда отображается четырефрагмент/загружен? а затем clickable = true снова на Onefragment при удалении четырехфрагментов? вы также можете попытаться сделать вид Onefragment ушедшим или буквально удалить его из своего родительского представления? –