Разрешение времени выполнения на вкладке Android с ViewPager - PullRequest
0 голосов
/ 01 ноября 2018

В моей вкладке содержатся фрагменты видового экрана. В приложении 3 вкладки. Мне нужны разные разрешения времени выполнения для каждой вкладки. Я запускаю приложение для первого разрешения для запроса tab1. Я нажал на tab2 без разрешения спрашивает. Если я нажму разрешение Tab3 спросить. Если я запускаю приложение во второй раз, разрешение для tab2 спрашивает. Как я могу решить это?

    mTab1 = new Tab1();
    mTab2 = new Tab2();
    mTab3 = new Tab3();
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(mTab1, tabTitles[0]);
    adapter.addFragment(mTab1, tabTitles[1]);
    adapter.addFragment(mTab1, tabTitles[2]);
    viewPager.setAdapter(adapter);

фрагмент для вкладки

public class Tab1 extends Fragment {

    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter mAdapter;
    private List<ListAdapter.Item> items = new ArrayList<>();
    private Context mContext = null;
    private static boolean mbPermission = false;
    private int mnCount = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        Log.e("Calls", "onCreate " + mbPermission);

        if( PackageManager.PERMISSION_GRANTED = ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CALL_LOG){
          LoadViews();
        } else {
            requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG},MULTIPLE_PERMISSIONS );
        } 
    }

        @Override
    public void onRequestPermissionsResult(int requestCode, String permissionsList[], int[] grantResults) {
        switch (requestCode) {
            case MULTIPLE_PERMISSIONS:{
                for( int i = 0; i < grantResults.length; i++){
                    if( grantResults[i] == PackageManager.PERMISSION_GRANTED ){
                        LoadViews();
                    } else {
                        Log.e("MainActivity", " Permitted NOT OK: " + permissionsList[i]);
                    }
                }
                return;
            }
        }
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.e("Calls", "onCreateView " + mbPermission);
        View Root = inflater.inflate(R.layout.fragment_one, container, false);
        RecyclerView recyclerView = (RecyclerView) Root.findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mAdapter = new ListAdapter(items, 0, getContext());
        recyclerView.setAdapter(mAdapter);
        return Root;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        setUserVisibleHint(true);
    }
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Вы должны написать код разрешения в упражнении , , а не во фрагменте .

напишите ниже viewPager.setAdapter (адаптер); как это

 mTab1 = new Tab1();
    mTab2 = new Tab2();
    mTab3 = new Tab3();
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(mTab1, tabTitles[0]);
    adapter.addFragment(mTab1, tabTitles[1]);
    adapter.addFragment(mTab1, tabTitles[2]);
    viewPager.setAdapter(adapter);
if( PackageManager.PERMISSION_GRANTED = ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CALL_LOG){
          LoadViews();
        } else {
            requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG},MULTIPLE_PERMISSIONS );
        } 
0 голосов
/ 01 ноября 2018

Использование PageRefreshViewPager, который указан в приведенной ниже ссылке, загрузит только текущую страницу, которая видна в памяти и Ваша проблема будет решена, так как viewpager по умолчанию загружает две страницы в память

https://gist.github.com/r00786/0dc136a716e8027da33b08ea3154ade1

...