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;
}