1
カスタムロックスクリーンアプリケーションを終了する必要があります。 ViewPagerのない作業用バージョン(1ページのみ)があります。ビューからViewPagerを設定できません
ユーザーは、ルートビューを直接winManagerに追加することで、ユーザーが閉じられなかったフルスクリーンウィンドウを設定できました。
他のバージョンにはViewPager(スライド2枚)があります。通常のアプリケーションケースでは動作していますが、別のバージョンのようにwinManagerに追加するルートビュー(wrapperView)内で作成しようとすると、アプリケーションがクラッシュします。違いはonCreateメソッドにあります。
ScreenLock2.onCreate:
...
/*Working version*/
setContentView(R.layout.screen_lock_fragment)
ViewPager mPager = (ViewPager) findViewById(R.id.pager);
/*Working version end*/
/*Not working version*/
wrapperView = new RelativeLayout(getBaseContext());
View.inflate(this, R.layout.screen_lock_fragment, wrapperView);
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
winManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
winManager.addView(wrapperView, localLayoutParams);
ViewPager mPager = (ViewPager) wrapperView.findViewById(R.id.pager);
/*Not working version end*/
ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
...
ScreenLock2.ScreenSlidePagerAdapterクラス:
public class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ScreenLockFragment.newInstance(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(mPager, position);
}
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return 2;
}
}
ScreenLockFragment:
public class ScreenLockFragment extends Fragment {
int page;
public static ScreenLockFragment newInstance(int page) {
ScreenLockFragment fragmentFirst = new ScreenLockFragment();
Bundle args = new Bundle();
args.putInt("pageInt", page);
fragmentFirst.setArguments(args);
return fragmentFirst;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("pageInt", 1);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ScreenLock2 screenLock2 = (ScreenLock2) getActivity();
container = screenLock2.mPager;
switch (page) {
case 0:
rootView = (ViewGroup) inflater.inflate(R.layout.screen_lock, container, false);
break;
case 1:
rootView = (ViewGroup) inflater.inflate(R.layout.screen_lock_main, container, false);
break;
}
return rootView;
}
}
エラーメッセージは以下の通りである:
java.lang.IllegalArgumentException: No view found for id 0x7f0e00fc (com.dynauth.login:id/pager) for fragment ScreenLockFragment{172ec3e #0 id=0x7f0e00fc android:switcher:2131624188:1}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)