notifyDataSetChanged();更新列表。当我输入TextView时,列表不会更改

时间:2015-09-08 09:45:17

标签: android android-layout

我创建了一个适配器,并使用Google Places API显示地址。

我致电notifyDataSetChanged();来更新列表。

但是当我输入TextView时,列表不会更改。

适配器

    adapter = new SelectAddressAdapter(this,android.R.layout.simple_list_item_1, addressList);      
    addressListView.setAdapter(adapter);

   addresseEditText.addTextChangedListener(new TextWatcher() {

               @Override
                public void run() {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {

                    GoogleAPIRequestHandler handler = new GoogleAPIRequestHandler();

                    String date= handler.execute(input).get();
                    addressList = new ArrayList<AddressList>();
                    JSONObject jsonObj = new JSONObject(date);

                    JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");
                        for (int i = 0; i < predsJsonArray.length(); i++) {
                        AddressList a = new AddressList();
                        String addressJson = predsJsonArray.getJSONObject(i).toString();
                        a.Deserialize(addressJson);
                        addressList.add(a);
        }        
        adapter.notifyDataSetChanged();;

2 个答案:

答案 0 :(得分:0)

更改

for (int i = 0; i < predsJsonArray.length(); i++) {
                        AddressList a = new AddressList();
                        String addressJson = predsJsonArray.getJSONObject(i).toString();
                        a.Deserialize(addressJson);
                        addressList.add(a);

for (int i = 0; i <= predsJsonArray.length(); i++) {
                      if(i<predsJsonArray.length())
                       {
                        AddressList a = new AddressList();
                        String addressJson = predsJsonArray.getJSONObject(i).toString();
                        a.Deserialize(addressJson);
                        addressList.add(a);
                     }
else
{
              adapter.notifyDataSetChanged();;
}

答案 1 :(得分:0)

我认为你需要实现TextWatcher的方法,你需要添加runOnUiThread方法

       addresseEditText.addTextChangedListener(new TextWatcher() {                       

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                GoogleAPIRequestHandler handler = new GoogleAPIRequestHandler();

                String date= handler.execute(input).get();
                addressList = new ArrayList<AddressList>();
                JSONObject jsonObj = new JSONObject(date);

                JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");
                    for (int i = 0; i < predsJsonArray.length(); i++) {
                    AddressList a = new AddressList();
                    String addressJson = predsJsonArray.getJSONObject(i).toString();
                    a.Deserialize(addressJson);
                    addressList.add(a);
    }        
    adapter.notifyDataSetChanged();
        }
    } 
   }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }
    });