2016-07-11 10 views
1

説明: 私は2つのフラグメントを持っています。私はフラグメントを1つ別のものに置き換えます。私のフラグメント名はFourFragmentとOneFragmentです。両方とも自分自身のレイアウトを持っています。他のフラグメントがアンドロイドで開いているときにフラグメントUIを無効にするにはどうすればよいですか?

要件:

私の要件は、私は、ツールバー上のTextViewを設定し、私は私のMainActivityでnavigationViewを持っています。私のアプリケーションが実行されている間、デフォルトのフラグメントが読み込まれます。 OneFragment正しいです。今、ツールバーのテキストビューをクリックすると、新しいフラグメントが開きます。 FourFragment。 Fourfragmentは画面の一部をカバーし、fourfragmentの残りの部分は透明です。私は以前のフラグメントUIを透過的に見ることができます。 OneFragment.Iはすべてのことをしました。

しかし、fourfragmentがOnefragmentにロードされている間、問題が発生します。しかし、fourfragmentがロードされるとonefragmentのUIがクリック可能になります。

fourfragmentがonefragmentにロードされているが、fourfragmentが開いているときにonefargmentのUIをクリックできないときに、自分の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; 
    } 
} 

注:ツールバーに設定されているtextviewをクリックした後、fourfragmentが表示されているときに、onefragmentが透明に見えるようにしたいとします。

この問題を解決するのを手伝ってください。事前に ありがとうを

+0

privateフィールドにrootViewを保存し、setEnabled(boolean)メソッドを呼び出すパブリックメソッドを追加してください。 –

+0

どのようにして断片を設定しましたか? –

+0

多分、fourfragmentが表示/ロードされているときにOnefragmentでclickable = falseを試してみませんか? fourfragmentが削除されたときOnefragmentで再びclickable = trueを返しますか? Onefragmentのビューを削除したり、親ビューから文字通り削除したりすることもできます。 –

答えて

1

セット=「true」をメインレイアウトクリッカブルを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"> 
関連する問題