2016-12-16 9 views
1

こんにちは私はListViewで検索したい、私はアダプタを書く、私はlistView、EditTextを持っています。私はcorretly検索everythink作業を削除する場合:活動でJava android listView検索

public class NewDataAdapter extends ArrayAdapter<DataRow> { 

     private Context context; 
     private ArrayList<DataRow> rows; 
     private LayoutInflater inflater; 
     private Page page; 
     private boolean[] sList; 
     private String[] columnNames; 
     public static String objectId; 
     public static String lineId; 
     private List<DataRow> searchList = null; 

     public NewDataAdapter(Context context, ArrayList<DataRow> rows, Page page) { 
      super(context, 0, rows); 
      this.context = context; 
      this.rows = new ArrayList<>(); 
      this.rows.addAll(rows); 
      this.page = page; 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      this.sList = page.getSTypesList(); 
      this.columnNames = page.getColumnsDataNames(); 
      this.searchList = rows; 
     } 

     public class ViewHolder { 
      TextView name; 
      TextView date; 
     } 

     public View getView(final int position, View view, ViewGroup parent) { 
      final ViewHolder holder; 
    //  DataRow row = rows.get(position); 
      if (view == null) { 
       holder = new ViewHolder(); 
       view = inflater.inflate(R.layout.listview_item, null); 
       holder.name = (TextView) view.findViewById(R.id.id_name); 
       holder.date = (TextView) view.findViewById(R.id.id_date); 
       view.setTag(holder); 
      } else { 
       holder = (ViewHolder) view.getTag(); 
      } 
       holder.name.setText(rows.get(position).getValues().get(0)); 
       holder.date.setText(rows.get(position).getValues().get(1)); 

      if (position == MainActivity.selectedListItem) { 
       view.setBackgroundColor(context.getResources().getColor(R.color.listSelectedItem)); 
       objectId = rows.get(position).getValues().get(5); 
       lineId = rows.get(position).getValues().get(0); 
       Log.e("wartosci ", objectId + ", " + lineId); 
      } else { 
       if (position % 2 == 0) { 
        view.setBackgroundColor(Color.LTGRAY); 
       } else { 
        view.setBackgroundColor(Color.WHITE); 
       } 
      } 

      return view; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     public void addRow(DataRow row) { 
      this.rows.add(row); 
     } 

     @Override 
     public DataRow getItem(int itemIndex) { 
      return rows.get(itemIndex); 
     } 

     public int getSize() { 
      return rows.size(); 
     } 

     public void filter(String charText) { 
      charText = charText.toLowerCase(Locale.getDefault()); 
      rows.clear(); 
      if (charText.length() == 0) { 
       rows.addAll(searchList); 
      } else { 
       for (DataRow wp : searchList) { 
        if (wp.getValueFromCol("nazwa").toLowerCase(Locale.getDefault()) 
          .contains(charText)) { 
         rows.add(wp); 
        } 
       } 
      } 
      notifyDataSetChanged(); 
     } 
    } 

は私が持っている:これは私のアダプタである

inputSearch = (EditText) findViewById(R.id.inputSearch); 

     inputSearch.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
       String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault()); 
       myAdapter.filter(text); 
      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

をそして、私は、検索を使用するときに、私のAPKがクラッシュです。ログでは私が持っている:

はラインで
                  java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4 

holder.name.setText(rows.get(position).getValues().get(0)); 

私は私は何をすべきかのアイデアを持っていない、間違った

答えて

1

があなたのArrayAdapterに

@Override 
public int getCount() { 
    return rows.size(); 
} 

を追加

関連する問題