Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
Android 无法在listview中添加标题_Android - Fatal编程技术网

Android 无法在listview中添加标题

Android 无法在listview中添加标题,android,Android,我在OnCreate方法上调用以下方法setupAdapter private void setupAdapter() { // set the list adapter JSONArray returnArray = null; try { returnArray = getQuickViewContents(); } catch (JSONException e) { e.printStackTrace(); }

我在OnCreate方法上调用以下方法setupAdapter

  private void setupAdapter() {

    // set the list adapter
    JSONArray returnArray = null;
    try {
        returnArray = getQuickViewContents();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    JSONObject obj0 = null;
    if (returnArray != null) {
        try {
            obj0 = returnArray.getJSONObject(0);

        } catch (JSONException e) {
            e.printStackTrace();

        }
    }
    try {
        getCreditCardDetails();
    } catch (JSONException e3) {
        e3.printStackTrace();
    }

    JSONArray productArray = null;
    try {
        productArray = obj0.getJSONArray("Content");
    } catch (JSONException e2) {
        e2.printStackTrace();
    }

    ArrayList<HashMap<String, String>> productList = new ArrayList<HashMap<String, String>>();



    if (productArray != null) {

        ListView lv = (ListView) findViewById(android.R.id.list);

        for (int i = 0; i < productArray.length(); i++) {

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap
            try {
                map.put(KEY_BRAND,
                        productArray.getJSONObject(i).getString("Brand"));
                map.put(KEY_QUANTITY_NAME, productArray.getJSONObject(i)
                        .getString("Quantity")
                        + " X "
                        + productArray.getJSONObject(i).getString("Name"));
                map.put(KEY_PRICE, Currency.britishPound
                        + productArray.getJSONObject(i)
                                .getString("MinCost"));
            } catch (JSONException e) {
                e.printStackTrace();
            }

            // adding HashList to ArrayList
            productList.add(map);


            adapter = new APIQuickCheckoutProductProvider(APIQuickCheckout.this, productList);
            lv.addHeaderView(headerMethod());


            lv.setAdapter(adapter);
            adapter.notifyDataSetChanged();

        }
    }
}

private View headerMethod() {

    View header = getLayoutInflater().inflate(R.layout.api_quick_checkout_header, null);
    card_cvv = (EditText) header.findViewById(R.id.api_quick_checkout_card_cvv);

    Button edit_payment_details = (Button) header.findViewById(R.id.edit_button_payment);
    edit_payment_details.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            final Intent i = new Intent(APIQuickCheckout.this,APIPaymentDetails.class);
            startActivity(i);
        }
    });

    // set the payment info layout
    TextView card_number = (TextView) header.findViewById(R.id.api_quick_checkout_card_number);
    TextView card_expiry = (TextView) header.findViewById(R.id.api_quick_checkout_card_expiry);
    try {
        card_number.setText(CheckoutManager.getInstance().getSelectedPaymentCard().getString("cardNumber"));
        card_expiry.setText(CheckoutManager.getInstance().getSelectedPaymentCard().getString("expDate"));
    } catch (Exception e1) {
        e1.printStackTrace();
    }

    return header;

}

我所要做的就是将headerMethod的内容添加为header。我做错了什么?

将这些代码行移出for循环


将这些代码行移出for循环


由于在调用setAdapter后尝试添加标头,因此引发错误。。。因为for循环不止一次地在其内部运行

由于您试图在调用setAdapter后添加标头,因此引发了错误。。。因为for循环不止一次地在其内部运行

在循环中使用setAdapter,在循环中使用otofloop。在循环中使用setAdapter,在循环中使用otofloop。
 12-24 17:31:17.805: E/AndroidRuntime(31051): FATAL EXCEPTION: main
 12-24 17:31:17.805: E/AndroidRuntime(31051): java.lang.RuntimeException: Unable to start     activity ComponentInfo{apicheckout.APIQuickCheckout}: java.lang.IllegalStateException:   Cannot add header view to list -- setAdapter has already been called.
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread.access$1500(ActivityThread.java:117)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.os.Handler.dispatchMessage(Handler.java:99)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.os.Looper.loop(Looper.java:130)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread.main(ActivityThread.java:3683)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at java.lang.reflect.Method.invokeNative(Native Method)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at java.lang.reflect.Method.invoke(Method.java:507)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at dalvik.system.NativeStart.main(Native Method)
 12-24 17:31:17.805: E/AndroidRuntime(31051): Caused by: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.widget.ListView.addHeaderView(ListView.java:279)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.widget.ListView.addHeaderView(ListView.java:302)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at apicheckout.APIQuickCheckout.setupAdapter(APIQuickCheckout.java:192)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at apicheckout.APIQuickCheckout.onCreate(APIQuickCheckout.java:121)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
 12-24 17:31:17.805: E/AndroidRuntime(31051):   ... 11 more
adapter = new APIQuickCheckoutProductProvider(APIQuickCheckout.this, productList);
lv.addHeaderView(headerMethod());
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();