我正在使用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)
mSlideableView
在SlidingUpPanelLayout.onMeasure()
方法中实例化(参见SlidingUpPanelLayout.java上的第574行)。
我应该如何(或在哪个生命周期阶段)显示向上展开的滑动面板?
答案 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中一样。