ViewPager и Android Wear = сбой - PullRequest
       39

ViewPager и Android Wear = сбой

0 голосов
/ 23 октября 2018

_

Здравствуйте, члены stackoverflow!

Я успешно работал с ViewPager (VP) над "нормальной" деятельностью.

Теперь я попытался использовать почтиТо же самое для приложения Android Wear.

В моей функции MainActivity, содержащей VP, я сталкивался с разными ошибками, такими как:

  • Ошибка 1: (getFragmentManager () -> "Не может бытьприкладная "
  • Ошибка 2: супер (менеджер); ->" Невозможно применить "
  • Ошибка 3: публичный фрагмент getItem (int i); ->" Несовместимый тип возврата "

Я нашел эту ветку и смог исправить эти ошибки, изменив импорт + изменив build.gradle.

Как реализовать просмотр пейджера в часах Android?

Это теперь мой импорт в моем MainActivity.java:

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.wearable.activity.WearableActivity;
import java.util.ArrayList;
import java.util.List;

Это остальная часть MainActivity:

public class MainActivity extends WearableActivity
{
    ViewPager vp; // Variable for Viewpager

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // Link to layout
        ViewPager vp = findViewById(R.id.vp); // Link variable to ID
        SetUpViewPager(vp); // Run viewpager method
    }
    public void SetUpViewPager(ViewPager viewpager)
    {
        MyViewPagerAdapter Adapter = new MyViewPagerAdapter(getFragmentManager());
        Adapter.AddPageFragment(new Fragment1(), "Fragment1");   // Load page 1 inside of ViewPager
        Adapter.AddPageFragment(new Fragment2(), "Fragment2");   // Load page 2 inside of ViewPager
        viewpager.setAdapter(Adapter);
    }
    public class MyViewPagerAdapter extends android.support.v4.app.FragmentPagerAdapter
    {
        private List<Fragment> MyFragment = new ArrayList<>();
        private List<String> MyPageTitle = new ArrayList<>();

        public MyViewPagerAdapter(FragmentManager manager)
        {
            super(manager);
        }
        public void AddPageFragment(Fragment Frag, String Title)
        {
            MyFragment.add(Frag);
            MyPageTitle.add(Title);
        }
        @Override
        public Fragment getItem(int i)
        {
            return MyFragment.get(i);
        }
        @Nullable
        @Override
        public CharSequence getPageTitle(int position)
        {
            return MyPageTitle.get(position);
        }
        @Override
        public int getCount()
        {
            return 2; // 2 pages total
        }
    }
}

Странно то, что говорит ViewPager vp;-> Поле 'vp' никогда не используется!

Fragment1: (Fragment2 такой же, за исключением 2 / два)

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment
{
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
    {
        View fragmentOne = inflater.inflate(R.layout.fragment1, container, false); // Link view and layout
        return fragmentOne;
    }
}

XML-файлы для фрагментов являются просто макетами ограничений с каждой 1 кнопкой.В content_main.xml содержится VP, который обращается к activity_main.xml.Я использовал то же самое на обычном устройстве смартфона, и оно работало безупречно.

Проблема в том, что каждый раз, когда я запускаю приложение в эмуляторе износа, оно сразу падает.

Это то, что говорит Logcat:

10-23 14:40:32.909 2203-2203/com.example.user.wearvp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.wearvp, PID: 2203
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.wearvp/com.example.user.wearvp.MainActivity}: java.lang.NullPointerException: 
Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: 
Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference
at com.example.user.wearvp.MainActivity.SetUpViewPager(MainActivity.java:35)
at com.example.user.wearvp.MainActivity.onCreate(MainActivity.java:24)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5422) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Буду признателен за любую помощь!

PS:

Если я забыл упомянуть что-то важное, просто спросите, и я дам вам необходимую информацию!

С уважением

1 Ответ

0 голосов
/ 23 октября 2018

Трассировка стека показывает, что в вашем файле макета activity_main.xml нет представления с идентификатором vp.Я не совсем уверен, что вы имеете в виду:

content_main.xml содержит VP, который обращается к activity_main.xml.

Если vp определено вмакет content_main.xml, то это может быть тот, который вы должны использовать с setContentView() (вместо текущего activity_main.xml).


Странно то, что говорит ViewPager vp;-> Поле 'vp' никогда не используется!

Локальная переменная vp (определенная внутри метода onCreate) затеняет переменную экземпляра vp.Если вам нужна область действия на уровне объекта, просто удалите ViewPager при назначении ему значения.

...