在Android中更新ListView项的值

时间:2013-08-20 05:41:03

标签: android android-layout android-listview

我有一个Listview显示一个列表。所以点击列表视图我有一个customDialog.In我从用户那里取一些值。所以一旦用户输入详细信息并点击确定按钮,然后我必须从列表视图更新该项目的值,当列表视图的所有项目都已更新,然后将其与之前的值进行比较,以检查是否所有项目都更新。请帮助我,我怎么可能这样做

活动代码

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函数我必须更新ListView的项目值。在创建continueBooking时我必须检查是否所有项目都已更新

Before Updation After Updation

2 个答案:

答案 0 :(得分:5)

永远不要直接更新ListView项。更新存储中的数据并调用适配器上的notifyDataSetChanged

答案 1 :(得分:2)

您的列表数据需要ArrayAdapter。然后,当您操作该数组中的数据时,您可以在adabter上调用.notifyDataSetChanged();来刷新视图。 请注意,它必须是相同的arraylist!所以你不能打电话arraylist = new ArrayList();来破坏参考。而是使用arraylist.clear();然后使用arraylist.addAll(data);

以下是一个例子:

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