2014-10-22 25 views
0

我的代碼下面的問題是窗格始終默認打開,不知道爲什麼。很顯然,我不希望窗格(子)默認打開。只有當用戶點擊lv_schedule時,窗格纔會打開。所以當片段加載時,我必須首先滑出窗格才能看到lv_schedule。窗格總是在SlidingPaneLayout實現中打開

這是XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SlidingPaneLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scheduledblocks_sliding_pane_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<LinearLayout 
    android:id="@+id/ll_left_pane_scheduled" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/lv_schedule" 
     android:layout_width="1000dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:layout_marginRight="0dp" 
     /> 

</LinearLayout> 

<!-- Framelayout to display Fragments --> 

<FrameLayout 
    android:id="@+id/frame_container_scheduledblocksslidingpanedetailview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="20dp" /> 

這是JAVA文件:

public class Fragment_allScheduledBlocks extends Fragment implements 
    View.OnClickListener, OnItemClickListener { 

private Handler handler; 

private ActionBarHelper mActionBar; 

private Thread thread = new Thread(); 

public Fragment_allScheduledBlocks() { 
} 

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

    mLogger.printToLog(Constants.LOG_ENTRY, 
      " onCreateView of Fragment_scheduled_blocks.java", 
      Constants.TAG_ALL); 

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

    mSlidingLayout = (SlidingPaneLayout) v 
      .findViewById(R.id.scheduledblocks_sliding_pane_layout); 
    mSlidingLayout.setPanelSlideListener(new SliderListenerSchBlocks()); 
    mSlidingLayout.openPane(); 


    lv_scheduled = (ListView) v.findViewById(R.id.lv_scheduled); 
    lv_scheduled.setOnItemClickListener(this); 

    mActionBar = createActionBarHelper(); 
    mActionBar.init(); 

    return v; 
} 


/** 
* This panel slide listener updates the action bar accordingly for each 
* panel state. 
*/ 
private class SliderListenerSchBlocks extends 
     SlidingPaneLayout.SimplePanelSlideListener { 
    @Override 
    public void onPanelOpened(View panel) { 
     mActionBar.onPanelOpened(); 
     Log.v(Constants.TAG, "in onPanelOPened inside SliderListener"); 
     getActivity().setTitle("LISTVIEW BLOCKS"); 

     mPrefs.printAllMySharedPrefs(getActivity().getApplicationContext()); 
    } 

    @Override 
    public void onPanelClosed(View panel) { 
     mActionBar.onPanelClosed(); 
     Log.v(Constants.TAG, "in onPanelClosed inside SliderListener"); 
     mPrefs.printAllMySharedPrefs(getActivity().getApplicationContext()); 
    } 

    @Override 
    public void onPanelSlide(View panel, float slideOffset) { 
     // TODO Auto-generated method stub 
     super.onPanelSlide(panel, slideOffset); 
    } 
} 




@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

} 

private class ActionBarHelper { 
    public void init() { 
    } 

    public void onPanelClosed() { 
    } 

    public void onPanelOpened() { 
    } 

    public void onFirstLayout() { 
    } 

    public void setTitle(CharSequence title) { 
    } 
} 

/* 
* Create a compatible helper that will manipulate the action bar if 
* available. 
*/ 
private ActionBarHelper createActionBarHelper() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     // return new ActionBarHelperICS(); 
     return new ActionBarHelper(); 
    } else { 
     return new ActionBarHelper(); 
    } 
} 

} 

回答

1

SlidingPaneLayout可以用於主/詳細圖案,但是這不是它的有可能的使用。因此,默認情況下,它想顯示細節。您將需要在Java代碼中改變該行爲。

This sample project實現對主/細圖案的SlidingPaneLayout,一些活動的代碼來處理 「窗格」 適當地:

/*** 
    Copyright (c) 2008-2013 CommonsWare, LLC 
    Licensed under the Apache License, Version 2.0 (the "License"); you may not 
    use this file except in compliance with the License. You may obtain a copy 
    of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. 

    From _The Busy Coder's Guide to Android Development_ 
    http://commonsware.com/Android 
*/ 

package com.commonsware.android.eu4you4; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.widget.SlidingPaneLayout; 

public class EU4You extends Activity implements 
    CountriesFragment.Contract { 
    private DetailsFragment details=null; 
    private SlidingPaneLayout panes=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    details= 
     (DetailsFragment)getFragmentManager().findFragmentById(R.id.details); 
    panes=(SlidingPaneLayout)findViewById(R.id.panes); 
    panes.openPane(); 
    } 

    @Override 
    public void onBackPressed() { 
    if (panes.isOpen()) { 
     super.onBackPressed(); 
    } 
    else { 
     panes.openPane(); 
    } 
    } 

    @Override 
    public void onCountrySelected(Country c) { 
    details.loadUrl(getString(c.url)); 
    panes.closePane(); 
    } 
} 

具體來說:

  • 它打開了窗格(即主人)當我們啓動時

  • 它關閉窗格,當用戶點擊一個項目在主人,顯示det AIL

  • 如果用戶單擊後退按鈕,窗格關閉時,它會打開窗格(返回到主),而不是在做正常BACK按鍵處理

3

如果你想開通過導航圖標您可以然後使用此窗格:

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

    layout = (SlidingPaneLayout) findViewById(R.id.sliding_pane_layout); 

    getToolbar().setNavigationIcon(R.drawable.ic_menu_white_24dp); 
    getToolbar().setNavigationOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    if (layout != null) { 
     if (!layout.isOpen()) { 
      layout.openPane(); 
     } else { 
      layout.closePane(); 
     } 
    } 
} 

乾杯,快樂編碼。 ;)

相關問題