5

我有一个显示列表的列表视图。所以在单击列表视图时我有一个自定义对话框。我正在从用户那里获取一些值。所以一旦用户输入详细信息并单击确定按钮,然后我必须从列表视图中更新该项目的值,并且当列表视图的所有项目都已更新时,然后将其与以前的值进行比较以检查所有项目是否已更新。请帮助我,我该怎么做

活动代码

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


                }
            }
        });

    }

乘客信息弹出功能我必须更新 ListView 的项目值。在创建 continueBooking 我必须检查是否所有项目都已更新

更新前 更新

4

2 回答 2

5

切勿ListView直接更新项目。更新存储中的数据并调用notifyDataSetChanged适配器。

于 2013-08-20T06:05:18.713 回答
2

您将需要一个ArrayAdapter带有数据的列表。然后,当您操作该数组中的数据时,您可以调用.notifyDataSetChanged();adabter 来刷新您的视图。请注意,它必须是相同的数组列表!所以你不能调用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;
    }
}
于 2013-08-20T06:29:50.027 回答