Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update the Value of the ListView Item In Android

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

like image 415
Developer Avatar asked Aug 20 '13 05:08

Developer


People also ask

How can you update a ListView dynamically?

This example demonstrates how do I dynamically update a ListView in android. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.

How to refresh ListView android studio?

To refresh the ListView in Android, call notifyDataSetChanged() method on the Adapter that has been set with the ListView. Also note that the method notifyDataSetChanged() has to be called on UI thread.


2 Answers

Never update ListView items directly. Update data in your storage and call notifyDataSetChanged on your adapter.

like image 109
kriomant Avatar answered Sep 30 '22 20:09

kriomant


You will need an ArrayAdapter with the data for your list. Then when you manipulate the data in that array you can call .notifyDataSetChanged(); on the adabter to refresh your view. Be aware that it have to be the same arraylist! so you cant call arraylist = new ArrayList(); that will destroy the reference. Instead 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;
    }
}
like image 39
JWqvist Avatar answered Sep 30 '22 20:09

JWqvist