Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.Throwable:ListView中带有SimpleDapter的addInArray_Java_Android_Listview_Simpleadapter - Fatal编程技术网

java.lang.Throwable:ListView中带有SimpleDapter的addInArray

java.lang.Throwable:ListView中带有SimpleDapter的addInArray,java,android,listview,simpleadapter,Java,Android,Listview,Simpleadapter,我有一个带有SimpleAdapter的ListView活动 活动: public class TankListActivity extends FragmentActivity implements OnShowResult { private final String ATTRIBUTE_NUMBER = "Number"; private final String ATTRIBUTE_FUEL = "Fuel"; private final String ATTR

我有一个带有SimpleAdapter的ListView活动

活动:

public class TankListActivity extends FragmentActivity implements OnShowResult {

    private final String ATTRIBUTE_NUMBER = "Number";
    private final String ATTRIBUTE_FUEL = "Fuel";
    private final String ATTRIBUTE_CAPACITY = "Capacity";
    private final String ATTRIBUTE_CAPACITY_CURRENT = "Capacity Current";


    private SimpleAdapter adapter;
    private ArrayList<Map<String, Object>> tankList;

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

        tankList = new ArrayList<>();

        String[] from = {ATTRIBUTE_NUMBER, ATTRIBUTE_FUEL, ATTRIBUTE_CAPACITY_CURRENT, ATTRIBUTE_CAPACITY};
        int[] to = {R.id.textview_tankitem_number, R.id.textview_tankitem_fuel, R.id.textview_tankitem_capacity_current, R.id.textview_tankitem_capacity};
        adapter = new SimpleAdapter(getApplicationContext(), tankList, R.layout.tank_list_item, from, to);
        adapter.setViewBinder(new TankItemBinder());

        ListView list = (ListView)findViewById(R.id.listview_tanklistactivity_list);
        list.setAdapter(adapter);
        list.setOnScrollListener(scrollListener);
        list.setOnItemClickListener(onItemClickListener);
        registerForContextMenu(list);
    }

    // ...

    class TankItemBinder implements SimpleAdapter.ViewBinder {
    @Override
    public boolean setViewValue(View view, Object o, String s) {
        switch (view.getId()) {
            case R.id.textview_tankitem_number:
                int i = (int)o;
                ((TextView)view).setText("№" + ((i < 0)?"":i));
                return true;

            case R.id.textview_tankitem_fuel:
                ((TextView)view).setText((String)o);
                return true;

            case R.id.textview_tankitem_capacity:
                ((TextView)view).setText(o + " л");
                return true;

            case R.id.textview_tankitem_capacity_current:
                ((TextView)view).setText(o + " л");
                return true;

            default: return false;
        }
    }
}

}

到目前为止,我注意到:如果在创建SimpleAdapter之前,
tankList
被某个值初始化,则不会出现以下消息:

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

    tankList = new ArrayList<>();

    // this solve the problem:
    Map<String, Object> item = new HashMap<>();
    item.put(ATTRIBUTE_NUMBER, -1);
    item.put(ATTRIBUTE_FUEL, "Loading...");
    item.put(ATTRIBUTE_CAPACITY_CURRENT, 0);
    item.put(ATTRIBUTE_CAPACITY, 0);
    tankList.add(item);


    String[] from = {ATTRIBUTE_NUMBER, ATTRIBUTE_FUEL, ATTRIBUTE_CAPACITY_CURRENT, ATTRIBUTE_CAPACITY};
    int[] to = {R.id.textview_tankitem_number, R.id.textview_tankitem_fuel, R.id.textview_tankitem_capacity_current, R.id.textview_tankitem_capacity};
    adapter = new SimpleAdapter(getApplicationContext(), tankList, R.layout.tank_list_item, from, to);
    adapter.setViewBinder(new TankItemBinder());

    ListView list = (ListView)findViewById(R.id.listview_tanklistactivity_list);
    list.setAdapter(adapter);
    list.setOnScrollListener(scrollListener);
    list.setOnItemClickListener(onItemClickListener);
    registerForContextMenu(list);
}
@覆盖
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、储罐清单);
tankList=新的ArrayList();
//这就解决了问题:
Map item=newhashmap();
物品放置(属性编号,-1);
物品放置(属性“装载…”);
项。放置(属性\容量\当前,0);
物品放置(属性为容量,0);
储罐清单。添加(项目);
字符串[]from={ATTRIBUTE_NUMBER,ATTRIBUTE_FUEL,ATTRIBUTE_CAPACITY_CURRENT,ATTRIBUTE_CAPACITY};
int[]to={R.id.textview_tankitem_编号,R.id.textview_tankitem_燃料,R.id.textview_tankitem_容量}当前,R.id.textview_tankitem_容量};
适配器=新的SimpleAdapter(getApplicationContext(),tankList,R.layout.tank\u list\u项,from,to);
setViewBinder(新的TankItemBinder());
ListView列表=(ListView)findViewById(R.id.ListView\u tanklistactivity\u列表);
list.setAdapter(适配器);
setOnScrollListener(scrollListener);
list.setOnItemClickListener(onItemClickListener);
registerForContextMenu(列表);
}

但我需要这个列表在加载时为空。如何修复此问题?

请共享
TankItemBinder
@0X0nosugar的代码,已添加。这是我的内心世界activity@0X0nosugar,在不同的设备上,屏幕上有5-7个项目。但我不明白这有什么关系。请注意我在帖子中的注释:如果列表至少由一个值初始化,则无论屏幕大小、列表内容以及列表所包含的元素如何,都不会有消息(在我的应用程序中,有十多个不同的列表是根据这个原则建立的,它们都给出了这个错误消息)。
D/ViewGroup﹕ addInArray been called, this = android.widget.ListView{4224c658 VFED.VCL .F....ID 0,96-540,922 #7f0700af app:id/listview_tanklistactivity_list}call stack =
    java.lang.Throwable: addInArray
            at android.view.ViewGroup.addInArray(ViewGroup.java:3786)
            at android.view.ViewGroup.addViewInner(ViewGroup.java:3740)
            at android.view.ViewGroup.addViewInLayout(ViewGroup.java:3687)
            at android.widget.ListView.setupChild(ListView.java:1862)
            at android.widget.ListView.makeAndAddView(ListView.java:1815)
            at android.widget.ListView.fillDown(ListView.java:698)
            at android.widget.ListView.fillFromTop(ListView.java:759)
            at android.widget.ListView.layoutChildren(ListView.java:1631)
            at android.widget.AbsListView.onLayout(AbsListView.java:2149)
            at android.view.View.layout(View.java:15125)
            at android.view.ViewGroup.layout(ViewGroup.java:4862)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
            at android.view.View.layout(View.java:15125)
            at android.view.ViewGroup.layout(ViewGroup.java:4862)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
            at android.view.View.layout(View.java:15125)
            at android.view.ViewGroup.layout(ViewGroup.java:4862)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
            at android.view.View.layout(View.java:15125)
            at android.view.ViewGroup.layout(ViewGroup.java:4862)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
            at android.view.View.layout(View.java:15125)
            at android.view.ViewGroup.layout(ViewGroup.java:4862)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2317)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2023)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
            at android.view.Choreographer.doCallbacks(Choreographer.java:591)
            at android.view.Choreographer.doFrame(Choreographer.java:560)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
            at android.os.Handler.handleCallback(Handler.java:808)
            at android.os.Handler.dispatchMessage(Handler.java:103)
            at android.os.Looper.loop(Looper.java:193)
            at android.app.ActivityThread.main(ActivityThread.java:5292)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
            at dalvik.system.NativeStart.main(Native Method)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tank_list);

    tankList = new ArrayList<>();

    // this solve the problem:
    Map<String, Object> item = new HashMap<>();
    item.put(ATTRIBUTE_NUMBER, -1);
    item.put(ATTRIBUTE_FUEL, "Loading...");
    item.put(ATTRIBUTE_CAPACITY_CURRENT, 0);
    item.put(ATTRIBUTE_CAPACITY, 0);
    tankList.add(item);


    String[] from = {ATTRIBUTE_NUMBER, ATTRIBUTE_FUEL, ATTRIBUTE_CAPACITY_CURRENT, ATTRIBUTE_CAPACITY};
    int[] to = {R.id.textview_tankitem_number, R.id.textview_tankitem_fuel, R.id.textview_tankitem_capacity_current, R.id.textview_tankitem_capacity};
    adapter = new SimpleAdapter(getApplicationContext(), tankList, R.layout.tank_list_item, from, to);
    adapter.setViewBinder(new TankItemBinder());

    ListView list = (ListView)findViewById(R.id.listview_tanklistactivity_list);
    list.setAdapter(adapter);
    list.setOnScrollListener(scrollListener);
    list.setOnItemClickListener(onItemClickListener);
    registerForContextMenu(list);
}