Установить элементы макета в AppCompactActivity, разделенном на фрагменты

Класс AppCompactActivity связан с 3 фрагментами, по которым вы можете перемещаться по нижнему меню. Весь код находится в AppCompactActivity. Приложение помечает меня как ошибку при настройке панели поиска и просмотра текста [Попытка вызвать виртуальный метод 'void android.widget.SeekBar.setMax(int)' для нулевой ссылки на объект]. Я не хочу перемещать код в java-файле соответствующих Фрагментов, можно ли решить проблему одинаково?

Основная деятельность

public class OpSearchPlaceActivity extends AppCompatActivity  implements NavigationView.OnNavigationItemSelectedListener  {

    Button get_place, bSave;
    EditText etPosition;
    SeekBar sbDistance;
    TextView tvProgress,tvLat, tvLon;
    int progress = 2;
    int maxProgress = 80;


    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle toggle;
    public static final String LoginPREF = "login";
    SharedPreferences sharedpreferences;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_op_search_place);




        get_place = (Button) findViewById(R.id.getPlace);
        bSave = (Button) findViewById(R.id.savePlace);
        etPosition = (EditText) findViewById(R.id.position);
        sbDistance = (SeekBar) findViewById(R.id.sbDistance);
        tvProgress = (TextView) findViewById(R.id.tvProgress);
        tvLat = (TextView) findViewById(R.id.tvLat);
        tvLon = (TextView) findViewById(R.id.tvLon);
        sbDistance.setMax(maxProgress);

        sbDistance.setProgress(progress);
        tvProgress.setText("" + progress);

        sbDistance.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                progress = i;
                tvProgress.setText("" + progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

Макет Основная деятельность

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/dlMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ale.butastupa.OpSearchPlaceActivity">





    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottom_nav"></FrameLayout>

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#c1c1c1"
        app:menu="@menu/bottom_menumap">

    </android.support.design.widget.BottomNavigationView>

    <android.support.design.widget.NavigationView
        android:id="@+id/nvMenu"
        app:headerLayout="@layout/header"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#ffffff"
        app:itemTextColor="@color/colorPrimaryDark"
        app:itemIconTint="@color/colorPrimaryDark"
        app:menu="@menu/drawermenu"
        android:layout_gravity="start">

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

Фрагмент 1

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="5">

            <EditText
                android:id="@+id/position"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="posizione attuale"
                android:layout_weight="2"/>

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="SELEZIONA PUNTO DIVERSO"
                android:id="@+id/getPlace"
                android:layout_weight="3"/>

        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingRight="10dp"
            android:paddingLeft="10dp"
            android:weightSum="5">

            <SeekBar
                android:id="@+id/sbDistance"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"/>

            <TextView
                android:id="@+id/tvProgress"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="2"
                android:textSize="24dp"
                android:layout_weight="4"
                android:layout_centerHorizontal="true"
                android:layout_alignParentTop="true"/>



        </LinearLayout>

        <TextView
            android:id="@+id/tvLat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"/>

        <TextView
            android:id="@+id/tvLon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="CERCA"
            android:id="@+id/savePlace"
            android:layout_gravity="center"/>

    </LinearLayout>

</RelativeLayout>

Java-фрагмент 1

public class FilterOpSearchFragment extends Fragment  {






    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_opsearch_filter, container, false);




        return rootView;
    }


}

person Afol    schedule 21.07.2018    source источник
comment
У вас есть нулевая ссылка на объект. Я думаю, что ваш SeekBar не создан. Вы получили свой SeekBar из вашего представления? В вашем коде должно выглядеть примерно так: SeekBar simpleSeekBar = (SeekBar) findViewById(R.id.simpleSeekBar);   -  person Ogiez    schedule 21.07.2018
comment
Элементы были инициализированы открытый класс OpSearchPlaceActivity расширяет AppCompatActivity, реализует NavigationView.OnNavigationItemSelectedListener { SeekBar sbDistance; прогресс = 2; интервал maxProgress = 80; … @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_op_search_place); … sbDistance = (SeekBar) findViewById(R.id.sbDistance); sbDistance.setMax(maxProgress); sbDistance.setProgress(прогресс);   -  person Afol    schedule 21.07.2018
comment
Используете ли вы панель поиска в каких-либо других частях вашего кода? Поскольку вы используете свою панель поиска в качестве переменной экземпляра, я предполагаю, что вы меняете некоторые значения на ней до того, как она будет создана в вашем методе onCreate. Было бы неплохо, если бы вы могли включить в свой вопрос некоторый код по поводу использования SeekBar.   -  person Ogiez    schedule 21.07.2018
comment
отредактировал, добавил код   -  person Afol    schedule 21.07.2018
comment
Ах, я вижу, я думаю, вам, возможно, придется добавить свои экземпляры внутри вашего класса фрагментов, вы не можете напрямую получить их из другого макета, подобного этому. Почему бы вам просто не использовать фрагмент и не добавить все компоненты непосредственно в макет MainActivity. Я не думаю, что есть простой способ получить все компоненты из фрагмента в MainActivity. Я просто не вижу смысла иметь фрагмент, если вы собираетесь использовать все компоненты внутри своей MainActivity. Извините, я не совсем понял ваш вопрос, пока не увидел код.   -  person Ogiez    schedule 21.07.2018
comment
Я написал под решением. Большое спасибо Огиз!   -  person Afol    schedule 22.07.2018


Ответы (1)


Я решил. Просто используйте функции «getSystemService», а затем «раздуйте». Этим способом

    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layoutFilter = inflater.inflate(R.layout.fragment_opsearch_filter, null);

    get_place = (Button) layoutFilter.findViewById(R.id.getPlace);
    bSave = (Button) layoutFilter.findViewById(R.id.savePlace);
    sbDistance = (SeekBar) layoutFilter.findViewById(R.id.sbDistance);
    tvProgress = (TextView) layoutFilter.findViewById(R.id.tvProgress);

но теперь нижнее_меню покрывает всю страницу

person Afol    schedule 22.07.2018