2013-08-20 49 views
4

我有一个列表视图显示一个列表。所以在ListView的点击我有一个customDialog.In。我从用户采取一些值。所以希望一旦用户输入详细信息并单击确定按钮,然后我必须从列表视图中更新该项目的值,并且当列表视图的所有项目都已更新后,将其与之前的值进行比较以检查所有项目是否已更新或不能。帮助我在这我怎么能做到这一点在Android中更新ListView项的值

活动代码

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


       } 
      } 
     }); 

    } 

passen gerInformationPopup功能我要更新ListView的。在对创建continueBooking我有项目价值,检查所有的项目是否被更新或不

Before Updation After Updation

+0

贵的ListView行项目有什么看法? – Raghunandan

+0

@Raghunandan它会像Adult1,Adult2,Child1.So的用户点击Adult1它将采取他的名字,然后在列表视图中,我必须更新Adult1到用户提供使用的名称。每个item.Once他clik完成按钮,然后我必须检查是否所有listview项目是否更新 – Developer

+0

不清楚你可以发布你的列表视图 – Raghunandan

回答

5

不要直接更新ListView项目。更新存储器中的数据并在适配器上拨打notifyDataSetChanged

+2

我怎么可能请这样做,请提供示例代码 – Developer

+0

非常感谢kriomant - 这个问题一直让我很烦恼。 –

2

您将需要一个ArrayAdapter与您的列表的数据。然后,当您操作该数组中的数据时,您可以在adabter上调用.notifyDataSetChanged();来刷新您的视图。 请注意它必须是相同的数组列表!所以你不能打电话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然后你在getView中创建onClicklistener方法,该方法调用与int位置parm – JWqvist

+0

将您发布一些示例代码为我的问题如何更新和验证列表视图项目 – Developer