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) 

答えて

1

解決策が見つかりました。 FragmentPagerAdapterを標準のPagerAdapterに置き換えました。

関連する問題