【问题标题】:Populate Listview from string array source, with a String ArrayAdapter [duplicate]使用 String ArrayAdapter 从字符串数组源填充 Listview [重复]
【发布时间】:2014-02-14 16:20:26
【问题描述】:

我需要使用来自字符串资源的数组填充列表视图。如何将数组传递给我的适配器?当我尝试关注时,出现以下错误

ArrayAdapter zooAdapter = ArrayAdapter.createFromResource(this, R.array.animals, android.R.id.text1);
zooList.setAdapter(zooAdapter);
zooList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub

            }
        });

除了找不到资源,我不知道如何处理错误日志。但是我所有的资源都在那里,我没有从 Eclipse 中得到任何错误。 无论如何,我需要做的是从 Array 资源中加载我的 arrayAdapter 数据,有人知道该怎么做吗?

FATAL EXCEPTION: main
 android.content.res.Resources$NotFoundException: File  from xml type layout resource ID #0x1020014
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2184)
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2139)
    at android.content.res.Resources.getLayout(Resources.java:891)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
    at android.widget.AbsListView.obtainView(AbsListView.java:2306)
    at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
    at android.widget.ListView.onMeasure(ListView.java:1156)
    at android.view.View.measure(View.java:15293)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1418)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:709)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:602)
    at android.view.View.measure(View.java:15293)
    at android.widget.SlidingDrawer.onMeasure(SlidingDrawer.java:270)
    at android.view.View.measure(View.java:15293)
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:630)
    at android.view.View.measure(View.java:15293)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:15293)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1418)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:709)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:602)
    at android.view.View.measure(View.java:15293)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2425)
    at android.view.View.measure(View.java:15293)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1876)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1112)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1301)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1010)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4255)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
    at android.view.Choreographer.doFrame(Choreographer.java:525)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4849)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.io.FileNotFoundException: 
    at android.content.res.AssetManager.openXmlAssetNative(Native Method)
    at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:487)
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2166)
    ... 48 more

【问题讨论】:

    标签: android arrays android-layout listview android-arrayadapter


    【解决方案1】:

    我可以在您的代码中看到两处错误:

    1 - 您没有正确获取数组:

    getResources().getStringArray(R.array.animals);
    

    2 - 您不会将行布局传递给您的适配器

    // Create an ArrayAdapter from the String Array.
    final ArrayAdapter<CharSequence> aa =
        ArrayAdapter.createFromResource
        (
            getActivity(), values, R.layout.list_row
        );
    

    在这种情况下是自定义行

    大家一起:

    // Create an ArrayAdapter from the String Array.
    final ArrayAdapter<CharSequence> aa =
        ArrayAdapter.createFromResource
        (
            getActivity(), getResources().getStringArray(R.array.animals), R.layout.list_row
        );
    

    【讨论】:

      【解决方案2】:

      你也可以关注这个:

      1) 将您的字符串数组存储在 String[] 变量中,现在这将是您的源数据。

      2) 定义 ArrayAdapter,这将让您了解如何表示您的源数据。

      现在该怎么做?

      String[] zooString=getResources().getStringArray(R.array.animals);
      ArrayAdapter<String> zooAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, zooString);
      
      zooList.setAdapter(zooAdapter);
      zooList.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              // TODO Auto-generated method stub
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2012-08-20
        • 2013-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 2017-03-29
        相关资源
        最近更新 更多