2014-10-22 3 views
0

내 코드의 문제점은 창이 항상 기본적으로 열립니다., 그 이유는 알 수 없습니다. 분명히, 기본적으로 창 (아이)이 열리지 않기를 바란다. 사용자가 lv_schedule을 클릭 할 때만 창이 열립니다. 따라서 프래그먼트가로드되면 실제로 lv_schedule을보기 위해 먼저 패널을 슬라이드 아웃해야합니다.SlidingPaneLayout 구현시 창 항상 열림

<?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" /> 

이 자바 파일 :

은 XML입니다

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 코드에서이 동작을 변경해야합니다. 구체적

/*** 
    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(); 
    } 
} 

:

This sample project 적절히 "창"처리하는 일부 활동 코드와 마스터/세부 패턴위한 SlidingPaneLayout 구현

  • 그것은 창를 개방 (즉, 마스터) 우리가 시작할 때

  • 사용자가 마스터의 항목을 클릭하면 det를 표시하는 창을 닫습니다 AIL

  • 사용자가 BACK 버튼을 클릭하고, 창 폐쇄되면, 그것은 열려고하는 경우에, 창 (마스터 복귀) 대신하고 정상적인 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(); 
     } 
    } 
} 

건배, 행복한 코딩. ;)

관련 문제