1

Whenever I add a value to my spinner in List View, Its value is deleted while Scrolling.I have used ViewHolder also.But It shows NullPointerException while using ViewHolder. So help me by seeing the code Below.

Logcat

**FATAL EXCEPTION: main
Process: com.example.dellt.quickbill, PID: 19323
java.lang.NullPointerException at com.example.dellt.quickbill.NightyChoose$CustomAdapter.getView(NightyChoose.java:381)

at android.widget.AbsListView.obtainView(AbsListView.java:2338)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1273)
at android.widget.ListView.onMeasure(ListView.java:1182)
at android.view.View.measure(View.java:16849)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:824)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:500)
at android.view.View.measure(View.java:16849)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5379)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:16849)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5379)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:16849)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5379)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
at android.view.View.measure(View.java:16849)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5379)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1621)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:742)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:607)
at android.view.View.measure(View.java:16849)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5379)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:340)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2332)
at android.view.View.measure(View.java:16849)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2403)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1369)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1640)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6412)
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:5299)
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:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)**

----------Program----------

class CustomAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            int i=0,counter=0;
            for(i=0;i<size.length;i++)
            {
                if(size[i]!=null)
                {
                    counter++;
                }
            }
            return counter;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final TextView t1;
            View v=convertView;
            ViewHolder vh=new ViewHolder();
            v=getLayoutInflater().inflate(R.layout.customlayout,null);
            if(v==null) {
                t1=(TextView) v.findViewById(R.id.loca);
                    t1.setText("ID:" + id1[position] + "\nModel: " + size[position] + "\nPrice:" + price[position]);
                    vh.spinner = (Spinner) v.findViewById(R.id.spinner);
                    adapter1 = new ArrayAdapter<String>(NightyChoose.this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.value));
                    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    vh.spinner1 = (Spinner) v.findViewById(R.id.spinner1);
                    adapter2 = new ArrayAdapter<String>(NightyChoose.this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.less));
                    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    vh.spinner.setAdapter(adapter1);
                    vh.spinner1.setAdapter(adapter2);
                    v.setTag(vh);
            }
            else
            {
               vh=(ViewHolder) v.getTag();
            }
            vh.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position1, long id) {

                    if (position1 > 0 && position1 <= 300) {
                        boolean b = check_exist(position);
                        if (b == true) {
                            id2[count[0]] = id1[position];
                            size1[count[0]] = size[position];
                            price1[count[0]] = price[position];
                            quan[count[0]] = String.valueOf(position1);
                            change[count[0]] = false;
                            count[0]++;
                        }
                        if (b == false) {
                            int val = check_exist1(position);
                            quan[val] = String.valueOf(position1);
                        }
                    } else if (position1 == 0) {
                        boolean b = check_exist(position);
                        if (b == true) {

                        }
                        if (b == false) {
                            int val = check_exist1(position);
                            for (int m = val; m < count[0]; m++) {
                                id2[m] = id2[m + 1];
                                size1[m] = size1[m + 1];
                                price1[m] = price1[m + 1];
                                quan[m] = quan[m + 1];
                                change[m] = change[m + 1];
                            }
                            count[0]--;
                        }
                    }
                }

                public boolean check_exist(int position) {
                    for (int i = 0; i < count[0]; i++) {
                        if (id1[position] == id2[i]) {
                            return false;
                        }
                    }
                    return true;
                }

                public int check_exist1(int position) {
                    for (int i = 0; i < count[0]; i++) {
                        if (id1[position] == id2[i]) {
                            return i;
                        }
                    }
                    return i;
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }

            });
            vh.spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position1, long id) {
                    if (!change[position]) {
                        if (position1 >= 1 && position1 < 12) {
                            int k = findarrayvalueIneed(id1[position]);
                            int sum = Integer.parseInt(price1[k]) - (position1);
                            price1[k] = String.valueOf(sum);
                            change[position] = true;
                        }
                    } else if (change[position]) {
                        if (position1 >= 0 && position1 < 12) {
                            int k = findarrayvalueIneed(id1[position]);
                            price1[k] = price[position];
                            int sum = Integer.parseInt(price1[k]) - (position1);
                            price1[k] = String.valueOf(sum);
                        }
                    }

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }

                public int findarrayvalueIneed(String j) {
                    for (int i = 0; i < count[0]; i++) {
                        if (id2[i] == j) {
                            return i;
                        }
                    }
                    return 0;
                }
            });
            return v;
        }
    }
    private class ViewHolder{
        Spinner spinner,spinner1;
    }
Vitaly Migunov
  • 4,297
  • 2
  • 19
  • 23

0 Answers0