【问题标题】:App crashes when combining ListView and Fragment组合 ListView 和 Fragment 时应用程序崩溃
【发布时间】:2018-06-15 22:28:51
【问题描述】:

我是编程新手,在互联网上找不到任何理想的解决方案,因此希望您能帮助我。
我想编写一个应用程序,它有 4 个选项卡,每个选项卡都有一个 ListView。如果我创建一个只有 4 个选项卡或只有 ListView 的应用程序,它工作得非常好。然而,当涉及到结合这两个部分时,它不起作用。启动应用程序时它开始崩溃。
请看一下我的代码。我将只显示一个选项卡 java 和 xml 代码,因为它们总是相同的。
感谢您抽出宝贵时间。

MainActivity.java

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    private ViewPager mViewPager;

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

        mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.matrix.koks.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_weight="1"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:title="@string/app_name">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_1" />

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_2" />

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_3" />

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_4" />


        </android.support.design.widget.TabLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


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

Tab1.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;


public class Tab1 extends Fragment {

    EditText EditText;
    Button AddBtn;
    Button SubBtn;
    Button ResultBtn;
    Button ResetButton;
    ListView ListView;
    ArrayList<String> ArrayListString;
    ArrayAdapter<String> Adapter;
    ArrayList<Integer> ArrayListInteger;
    int Value;
    int Count;


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

        EditText = (EditText) getView().findViewById(R.id.EnterValueEditText1);
        AddBtn = (Button) getView().findViewById(R.id.AddDataButton1);
        SubBtn = (Button) getView().findViewById(R.id.SubDataButton1);
        ResultBtn = (Button) getView().findViewById(R.id.ResultButton1);
        ResetButton = (Button) getView().findViewById(R.id.ResetButton1);
        ListView = (ListView) getView().findViewById(R.id.ListView1);


        ArrayListString = new ArrayList<String>();
        Adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, ArrayListString);

        ArrayListInteger = new ArrayList<Integer>();

        ListView.setAdapter(Adapter);

        AddBtnClick();
        SubBtnClick();
        ResultButtonClick();
        ResetButtonClick();


        return rootView;
    }
    public void AddBtnClick(){
        AddBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String Number = EditText.getText().toString();
                ArrayListString.add(Number);
                Adapter.notifyDataSetChanged();

                Value = Integer.parseInt(EditText.getText().toString());

                Count += Value;

                EditText.getText().clear();

            }
        });
    }

    public void SubBtnClick(){
        SubBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String Number = EditText.getText().toString();
                ArrayListString.add(Number);
                Adapter.notifyDataSetChanged();

                Value = Integer.parseInt(EditText.getText().toString());

                Count -= Value;

                EditText.getText().clear();
            }
        });
    }

    public void ResultButtonClick(){
        ResultBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ArrayListString.clear();
                Adapter.notifyDataSetChanged();

                String Final = String.valueOf(Count);

                ArrayListString.add(Final);
                Adapter.notifyDataSetChanged();

            }
        });
    }

    public void ResetButtonClick(){
        ResetButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ArrayListString.clear();
                Adapter.notifyDataSetChanged();

                Count = 0;
            }
        });


    }

}

fragment_1.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<EditText
    android:id="@+id/EnterValueEditText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:ems="10"
    android:hint="@string/EditText"
    android:inputType="number"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/AddDataButton1"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="@string/AddData"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.275"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/EnterValueEditText1" />

<Button
    android:id="@+id/SubDataButton1"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="@string/SubData"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.725"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/EnterValueEditText1" />

<Button
    android:id="@+id/ResultButton1"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:text="@string/Result"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.275"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/AddDataButton1" />

    <Button
        android:id="@+id/ResetButton1"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:text="@string/Reset"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.725"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SubDataButton1" />

<ListView
    android:id="@+id/ListView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    app:layout_constraintTop_toBottomOf="@+id/ResultButton1" />


</android.support.constraint.ConstraintLayout>

Logcat

06-16 11:29:37.227 2486-2486/com.matrix.koks I/art: Not late-enabling -Xcheck:jni (already on)
06-16 11:29:37.227 2486-2486/com.matrix.koks W/art: Unexpected CPU variant for X86 using defaults: x86
06-16 11:29:37.321 2486-2486/com.matrix.koks W/System: ClassLoader referenced unknown path: /data/app/com.matrix.koks-2/lib/x86
06-16 11:29:37.334 2486-2486/com.matrix.koks I/InstantRun: starting instant run server: is main process
06-16 11:29:37.389 2486-2486/com.matrix.koks W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
06-16 11:29:40.501 2486-2486/com.matrix.koks D/AndroidRuntime: Shutting down VM


                                                               --------- beginning of crash
06-16 11:29:40.553 2486-2486/com.matrix.koks E/AndroidRuntime: FATAL EXCEPTION: main
                                                               Process: com.matrix.koks, PID: 2486
                                                               java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
                                                                   at com.matrix.koks.Tab1.onCreateView(Tab1.java:38)
                                                                   at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
                                                                   at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                                                                   at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
                                                                   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
                                                                   at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
                                                                   at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2215)
                                                                   at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:649)
                                                                   at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:145)
                                                                   at android.support.v4.view.ViewPager.populate(ViewPager.java:1238)
                                                                   at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
                                                                   at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1616)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:739)
                                                                   at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:91)
                                                                   at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1361)
                                                                   at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:809)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                   at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689)
                                                                   at android.view.View.measure(View.java:19857)
                                                                   at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275)
                                                                   at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366)
                                                                   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619)
                                                                   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                                   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
                                                                   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                                   at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                   at android.view.Choreographer.doFrame(Choreographer.java:621)
06-16 11:29:40.553 2486-2486/com.matrix.koks E/AndroidRuntime:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
                                                                   at android.os.Handler.handleCallback(Handler.java:751)
                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                   at android.os.Looper.loop(Looper.java:154)
                                                                   at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

    标签: java android listview android-fragments


    【解决方案1】:

    改用rootView

    示例

    EditText = (EditText)rootView.findViewById(R.id.EnterValueEditText1);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多