Android:适配器不会让我使用我创建的xml和id

时间:2014-04-10 21:09:52

标签: android android-listview

我有一个listview适配器,不允许我使用自己的xml文件,drawables或Id。它只允许我使用adk中的内容,如

android.R.id.text1

但我希望能够使用此

R.id.myOWNtext

这是适配器

mDrawerListView.setAdapter(new ArrayAdapter<String>(getActionBar().getThemedContext(),
        android.R.layout.activity_list_item, android.R.id.text1,
        new String[]{
                getString(R.string.title_section1),
                getString(R.string.title_section2),
                getString(R.string.title_section3),
                getString(R.string.title_section4),
                getString(R.string.title_section5),
        }));

这对我很好但是当我尝试编辑这个文件android.R.layout.activity_list_item,或任何其他一个没有发生。我甚至删除了activity_list_item文件中的所有内容,但仍然表现得好像没有进行任何更改。

当我在适配器中使用我自己的东西时,我得到以下错误:

04-10 17:08:24.670: E/AndroidRuntime(30940): FATAL EXCEPTION: main
04-10 17:08:24.670: E/AndroidRuntime(30940): java.lang.NullPointerException
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:353)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.AbsListView.obtainView(AbsListView.java:1636)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ListView.makeAndAddView(ListView.java:1772)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ListView.fillDown(ListView.java:695)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ListView.fillFromTop(ListView.java:752)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.ListView.layoutChildren(ListView.java:1609)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.AbsListView.onLayout(AbsListView.java:1466)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:714)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.View.layout(View.java:7375)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1158)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1878)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.os.Looper.loop(Looper.java:130)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at android.app.ActivityThread.main(ActivityThread.java:3691)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at java.lang.reflect.Method.invokeNative(Native Method)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at java.lang.reflect.Method.invoke(Method.java:507)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
04-10 17:08:24.670: E/AndroidRuntime(30940):    at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:0)

android.R.layout.activity_list_item是属于Android系统的布局,而不是允许您更改的布局。如果想要更改某些内容,则需要创建(并在调用ArrayAdapter构造函数时使用)自己的布局文件。

答案 1 :(得分:0)

通常,当您的xml文件未正确保存或者某些问题可能存在问题时,会发生这种情况,因为它不允许您从R.java文件中获取IDz。

答案 2 :(得分:0)

实例化适配器的方式意味着:

  • 它将使用android.R.layout.activity_list_item作为每个项目的布局
  • 它将使用带有id android.R.id.text1的TextView作为TextView来放置文本

有意义的是你正在改变布局而没有任何反应,因为你传递的布局(android.R.layout.activity_list_item)存在于SDK中。你不能改变它,你需要创建一个新的布局。

当您尝试使用新布局并获得NullPointerException时,可能是因为布局没有与您在适配器的构造函数中传递的ID相同的TextView。

因此,我需要为您需要的每个项目设置自定义布局:

  • 声明您的布局,其中应包含一个TextView
  • 在适配器的构造函数中,传递布局的id和布局中textview的id