2013-08-20 4 views
4

У меня есть Listview, который показывает список. Так что на клике listview у меня есть customDialog.In, что я беру некоторые значения от пользователя. Так что хотите, как только пользователь вводит детали и нажимает кнопку «ОК», затем мне нужно обновить значение этого элемента из списка и когда весь элемент списка был обновлен, а затем сравните его с предыдущим значением, чтобы проверить, обновлен ли весь элемент или не .help меня это, как я мог это сделатьОбновить значение элемента ListView в Android

код действия

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


       } 
      } 
     }); 

    } 

ЛЕГКОВЫХ Функция gerInformationPopup я должен обновить вещи значения ListView .в на создание continueBooking я должен проверить, обновляются все элементы или не

Before Updation After Updation

+0

какие представления имеет элементы вашей ListView строки есть? – Raghunandan

+0

@ Raghunandan это будет как Adult1, Adult2, Child1.So пользователя нажимает на Adult1, это займет его имя, а затем в списке, я должен обновить Adult1 до имени, которое пользователь предоставил для использования. item.Once он clik on done button, тогда мне нужно проверить, обновлены ли все элементы списка или нет. – Developer

+0

Непонятно, можете ли вы опубликовать мгновенный снимок вашего списка. – Raghunandan

ответ

5

Никогда не обновлять ListView элементы непосредственно. Обновите данные в своем хранилище и вызовите notifyDataSetChanged на свой адаптер.

+2

Как я могу сделайте это, пожалуйста, предоставьте мне пример кода – Developer

+0

Большое спасибо kriomant - эта проблема раздражала меня целую вечность. –

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

Итак, как я могу определить, какая позиция в массиве у меня есть обновление в массиве. Так что позиция элементов не изменится, посмотрите мой код, что я сделал – Developer

+0

Создайте свой собственный класс, который расширяет ArrayAdapter, тогда вы создаете onClicklistener в getView метод, этот метод вызывается с int position parm – JWqvist

+0

будет опубликовать некоторый пример кода для моей проблемы, как обновить и проверить элемент listview. – Developer

Смежные вопросы