如何显示向上滑动面板?

时间:2014-06-16 10:02:53

标签: android android-fragments

我正在使用umano的AndroidSlidingUpPanel。我想将展开的滑动面板显示出来。以下是我的片段代码。

public class Anasayfa extends BaseFragment {
    private SlidingUpPanelLayout partViewer;

    public Anasayfa(String id, String title) {
        super(id,title);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        partViewer = (SlidingUpPanelLayout) inflater.inflate(R.layout.fragment_issue_part, container, false);

        Issue issue = TaskManager.getIssue(TaskManager.getLatestIssueDate(),getActivity().getApplicationContext());
        FragmentActivity activity = getActivity();
        IssuePageAdapter adapter = new IssuePageAdapter(activity.getSupportFragmentManager(), issue.getPartAnaGazete());

        ViewPager issuePager = (ViewPager) partViewer.findViewById(R.id.pager);
        issuePager.setAdapter(adapter);

        partViewer.expandPanel();

        return partViewer;
    }
}

我使用以下代码将片段附加到我的活动中:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    settings = getSharedPreferences("UserInfo", 0);

    imageLoader = ImageLoader.getInstance(this);

    setupDrawer();

    gotoFragmentAnasayfa();
}

public void gotoFragmentAnasayfa() {
    Fragment myApp = new Anasayfa("", "Anasayfa");
    goToFragment(myApp);
}

private void goToFragment(Fragment view) {
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.content_frame, view);
    transaction.commit();
}

但我得到NullPointerException,因为SlidingUpPanelLayout.mSlideableView尚未实例化。

以下是堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.promob.myapp/com.promob.myapp.MainActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.sothree.slidinguppanel.SlidingUpPanelLayout.expandPanel(SlidingUpPanelLayout.java:887)
        at com.sothree.slidinguppanel.SlidingUpPanelLayout.expandPanel(SlidingUpPanelLayout.java:876)
        at com.promob.myapp.fragment.Anasayfa.onCreateView(Anasayfa.java:39)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)

mSlideableViewSlidingUpPanelLayout.onMeasure()方法中实例化(参见SlidingUpPanelLayout.java上的第574行)。

我应该如何(或在哪个生命周期阶段)显示向上展开的滑动面板?

2 个答案:

答案 0 :(得分:2)

达累斯萨拉姆。

在我使用的最新版本中,添加了此属性:

sothree:umanoInitialState="expanded"

所以我的代码是这样的:

<com.sothree.slidinguppanel.SlidingUpPanelLayout
    xmlns:sothree="http://schemas.android.com/apk/res-auto"
    android:id="@+id/spl_SlideLayout_activity_searchform"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top"
    sothree:umanoPanelHeight="68dp"
    sothree:umanoShadowHeight="4dp"
    sothree:umanoParalaxOffset="100dp"
    sothree:umanoDragView="@+id/dragView" 

    sothree:umanoInitialState="expanded" >

答案 1 :(得分:0)

您有两种选择: 1)向活动的处理程序发送消息,然后打开面板:

onCreateView中的

partViewer = (SlidingUpPanelLayout) inflater.inflate(R.layout.fragment_issue_part, container, false);
Handler h = new Handler() {

    public void handleMessage(final Message msg) {
        partViewer.expandPanel();
    }
}
h.sendEmptyMessage(0);
...

我不喜欢这个解决方案,因为它似乎是库中的一个错误,所以:

2)重写SlideUpPanel类并在构造函数中定义mSlideableView,就像在onMeasure中一样。

相关问题