【问题标题】:Adding listview to a fragment in android app将listview添加到android应用程序中的片段
【发布时间】:2014-07-18 03:21:04
【问题描述】:

我正在开发一个有 4 个片段的应用程序。现在我想在片段上添加列表视图。我尝试了来自谷歌的各种链接,但无法做到。

我的片段类代码:

public class ExerciseActivity extends Fragment {

public static final String ARG_SECTION_NUMBER = "section_number";

public ExerciseActivity() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Create a new TextView and set its text to the fragment's section
    // number argument value.
    View V = inflater.inflate(R.layout.fragment_exercise,container,false);
    //View V = inflater.inflate(R.layout.mainList, container, false);

    ListView LV = (ListView) this.getActivity().findViewById(R.id.mainList);
    String List[] = new String[2];
    List[0] = "tst1";
    List[1] ="tst2";
    ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, List);

    LV.setAdapter(aa);

    return V;
}
}

以下是我的片段 xml 代码:

<?xml version="1.0" encoding="utf-8"?>

每当我尝试运行我的应用程序时,我都会收到以下错误:

05-29 00:11:42.680:E/AndroidRuntime(1298):致命异常:主要 05-29 00:11:42.680: E/AndroidRuntime(1298): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.kris.fittracker/com.kris.fittracker.MainActivity}: java.lang.NullPointerException 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread.access$600(ActivityThread.java:122) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.os.Handler.dispatchMessage(Handler.java:99) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.os.Looper.loop(Looper.java:137) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread.main(ActivityThread.java:4340) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 java.lang.reflect.Method.invoke(Method.java:511) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 dalvik.system.NativeStart.main(Native Method) 05-29 00:11:42.680: E/AndroidRuntime(1298): 引起: java.lang.NullPointerException 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 com.kris.fittracker.ExerciseActivity.onCreateView(ExerciseActivity.java:31) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1097) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1895) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:566) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.Activity.performStart(Activity.java:4475) 05-29 00:11:42.680: E/AndroidRuntime(1298): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928)

【问题讨论】:

    标签: android listview android-fragments android-listview


    【解决方案1】:

    我的完整代码(listview 上面声明为“private ListView listView;”)

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        v = inflater.inflate(R.layout.second_fragment, container, false);
        listView = (ListView) v.findViewById(R.id.times_listView);
     return v;
     }
    

    【讨论】:

      【解决方案2】:

      问题是您正在从主活动布局中获取视图..

      ListView LV = (ListView) this.getActivity().findViewById(R.id.mainList);
      

      this.getAcitivity 是主要活动..

      解决方案:

      使用你刚刚膨胀的视图

      ListView LV = (ListView) V.findViewById(R.id.mainList);
      

      【讨论】:

        【解决方案3】:

        如果您的列表视图包含在 R.layout.fragment_exercise 布局文件中,请将列表视图映射更改为

         ListView LV = (ListView)V.findViewById(R.id.mainList);
        

        【讨论】:

          【解决方案4】:

          问题是:

          ListView LV = (ListView) this.getActivity().findViewById(R.id.mainList);
          

          getActivity() 上下文不了解 ma​​inList,您需要使用包含具有该 ID 的 ListView 的正确 View: p>

          ListView LV = (ListView) V.findViewById(R.id.mainList);
          

          我说的那个视图是你的视图,命名为 V。现在应该可以了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-08
            • 1970-01-01
            • 2023-04-08
            • 1970-01-01
            相关资源
            最近更新 更多