1

Мне нужно закончить пользовательское приложение lockscreen. Существует рабочая версия без ViewPager (только одна страница).Невозможно установить ViewPager из вида

Мне удалось установить полноэкранное окно, которое пользователи не смогли закрыть, добавив корневой вид непосредственно в winManager.

У меня есть другая версия с ViewPager (2 слайда). Он работает в обычном приложении, но когда я пытаюсь создать его в корневом представлении (wrapperView), который я добавляю в winManager (например, в другой версии), приложение аварийно завершает работу. Разница заключается в методе 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.

Смежные вопросы