Update ListView item value on Android

I have a Listview that shows a list. So when I click on the list, I have customDialog.In that I take some values ​​from the user. Therefore, as soon as the user enters data and presses the ok button, then I have to update the value of this item from the list and when the entire list item has been updated, then compare it with the previous value to check whether the entire item is updated or not. Help me with this, how can I do it

Action 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()); } } }); } 

Passenger input function. I need to update the values ​​of ListView items. In the process of creating continueBooking, I need to check if all items are updated or not.

Before upgrade After upgrade

+4
source share
2 answers

Never refresh ListView items directly. Update the data in your repository and call notifyDataSetChanged on your adapter.

+5
source

You will need an ArrayAdapter with data for your list. Then, when you manipulate the data in this array, you can call .notifyDataSetChanged(); on adabter to update your submission. Keep in mind that this must be the same arraialist! therefore you cannot call arraylist = new ArrayList(); which will destroy the link. Use arraylist.clear(); and then arraylist.addAll(data);

Here is an example:

  public class GroupsListAdapter extends ArrayAdapter<Object> { /** * Constructor * * @param context * Context * @param objects * Array of objects to show in the list. */ public GroupsListAdapter(Context context, ArrayList<Object> objects) { super(context, R.layout.row, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { Object = getItem(position); /* Initialize strings */ String nameText = group.getName(); boolean upToDate = group.isUpToDate(); /* Get the layout for the list rows */ View rowView = convertView; if (rowView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.row, parent, false); } rowView.setOnClickListener(new OnClickListener() { public void onClick(View v) { //do stuff here } }); return rowView; } } 
+2
source

Source: https://habr.com/ru/post/1497923/


All Articles