2016-07-11 2 views
1

Объяснение: У меня есть два фрагмента, где я заменяю фрагмент один над другим. Мое имя фрагмента - 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 заранее

+0

Попробуйте сохранить rootView в закрытом поле и добавить общедоступный метод, который вызывает метод setEnabled (boolean). –

+0

Как и в каком фрагменте я установил эту вещь? –

+0

Возможно, попробуйте clickable = false на Onefragment, когда отображается четырефрагмент/загружен? а затем clickable = true снова на Onefragment при удалении четырехфрагментов? вы также можете попытаться сделать вид Onefragment ушедшим или буквально удалить его из своего родительского представления? –

ответ

1

Set FourFragment основной макет кликабельным = «истинный», так что после загрузки fourfragment его родительский компоновщик кликабельна поэтому скрытый фрагмент виджета не щелкает, пока это основной макет не кликабельна

FourFragment.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:clickable="true"> 
Смежные вопросы