Update the Value of the ListView Item In Android
android, android-layout, android-listview
Solution
Never update `ListView` items directly. Update data in your storage and call `notifyDataSetChanged` on your adapter.
Problem
I have a Listview that is showing a list .So on the click of the listview i have a customDialog.In that i am taking some values from the user.So want once the user enters the details and click on the ok button ,then i have to update the value of that item from the listview and when all the item of the listview has been updated then compare it with the previous value to check whether all the item are updated or not .Help me on this how could i do this Activity Code ``` protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_iween_booking_page); intent = getIntent(); isReturn = (Boolean) intent.getExtras().get("isReturn"); searchParam = (HashMap<String,String>) intent.getExtras().get("searchParam"); listView = (ListView) findViewById(R.id.passengerList); emailId = (TextView)findViewById(R.id.emailid); continuebooking = (ImageView)findViewById(R.id.continuebooking); firstName= (EditText)findViewById(R.id.firstName); lastName =(EditText)findViewById(R.id.LastName); mobileNumber =(EditText)findViewById(R.id.mobileNumber); setTittle(); if(searchParam.get("NoOfChild").equals("0") && searchParam.get("NoOfInfant").equals("0")&& searchParam.get("NoOfAdult").equals("1")){ } else { passengerList = getPassengerList(passengerInfo); showPassengerListView(passengerList); } continuebooking.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if(searchParam.get("NoOfChild").equals("0") && searchParam.get("NoOfInfant").equals("0") && searchParam.get("NoOfAdult").equals("1")){ if(firstName.getText().toString().trim().equalsIgnoreCase("")){ firstName.setError("Enter FirstName"); } if(lastName.getText().toString().trim().equalsIgnoreCase("")){ lastName.setError("Enter LastName"); } if(mobileNumber.getText().toString().trim().equalsIgnoreCase("")){ mobileNumber.setError("Enter Mobile No."); } }else{ int count = listView.getAdapter().getCount(); listData = new String[count]; for (int i = 0; i < count; i++) { listData[i] = listView.getAdapter().getItem(i).toString(); } for(int i=0;i<listView.getAdapter().getCount();i++){ for(int j=0;j<count;j++){ if(listData[j]==listView.getAdapter().getItem(i).toString()){ Log.d("listData data", listView.getAdapter().getItem(i).toString()); // View v=listView.getChildAt(i); // TextView tv=(TextView) v.findViewById(android.R.id.text1); // tv.setError("Please change the data"); } } } } } }); } private void showPassengerListView(final String[] passengerList) { adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, passengerList); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // int itemPosition = position; // String itemValue = (String) listView.getItemAtPosition(position); View v=listView.getChildAt(position); TextView tv=(TextView) v.findViewById(android.R.id.text1); tv.setError(null); passengerInformationPopup(passengerList,position); } }); } public void passengerInformationPopup(final String[] passengerList, final int position) { final Dialog dialog= new Dialog(Test.this,R.style.Dialog_Fullscreen); dialog.setContentView(R.layout.passenger_details_dialog); final EditText firstNameDialog; final EditText lastNameDialog; ImageView continueBooking; dateofBirth = (TextView)dialog.findViewById(R.id.dateofBirth); firstNameDialog = (EditText)dialog.findViewById(R.id.firstName); lastNameDialog =(EditText)dialog.findViewById(R.id.LastName); continueBooking =(ImageView)dialog.findViewById(R.id.continuebooking); if((passengerList[position].contains("Child"))|| (passengerList[position].contains("Infant"))){ dateofBirth.setVisibility(View.VISIBLE); }else{ dateofBirth.setVisibility(View.GONE); } dateofBirth.setClickable(true); dialog.show(); continueBooking.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { isSuccess= true; if(firstNameDialog.getText().toString().trim().equalsIgnoreCase("")){ firstNameDialog.setError("Enter FirstName"); isSuccess= false; } if(lastNameDialog.getText().toString().trim().equalsIgnoreCase("")){ lastNameDialog.setError("Enter LastName"); isSuccess= false; } if((passengerList[position].contains("Child"))|| (passengerList[position].contains("Infant"))){ if(dateofBirth.getText().toString().trim().equalsIgnoreCase("")){ dateofBirth.setError("Date of Birth Can't be blank"); isSuccess= false; } } if(isSuccess){ dialog.cancel(); View v=listView.getChildAt(position); TextView tv= (TextView) v.findViewById(android.R.id.text1); tv.setText(firstNameDialog.getText().toString().trim().toString()+" "+lastNameDialog.getText().toString().trim().toString()); } } }); } ``` passengerInformationPopup function i have to update the items values of the ListView .In on create continueBooking i have to check whether all the items are updated or not Before Updation After Updation