Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义阵列适配器中的Searchview_Java_Android - Fatal编程技术网

Java 自定义阵列适配器中的Searchview

Java 自定义阵列适配器中的Searchview,java,android,Java,Android,我在“ListView”中有一个自定义的“ArrayAdapter”,我的问题是使用“SearchView”菜单。它不能正常工作。我不知道问题是在搜索还是显示结果,因为什么都没有出现。并且,如果可能的话,我会显示一个自定义的结果列表。谢谢 带适配器的片段 ArrayList<Favoritos> favorites; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container

我在“ListView”中有一个自定义的“ArrayAdapter”,我的问题是使用“SearchView”菜单。它不能正常工作。我不知道问题是在搜索还是显示结果,因为什么都没有出现。并且,如果可能的话,我会显示一个自定义的结果列表。谢谢

带适配器的片段

 ArrayList<Favoritos> favorites;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View rootView = inflater.inflate(R.layout.list_item, container, false);
    favorites = new ArrayList<Favoritos>();
    favorites.add(new Favorites("Title", "addres", 5, false, 7, 22, 4.5f));
    favorites.add(new Favorites("Title", "addres", 3.5 , true, 7, 22, 3.0f));
    favorites.add(new Favorites("Title", "addres", 2, false, 7, 22, 4.0f));
    favorites.add(new Favorites("Titleo", "addres", 4.5, true, 7, 22, 5.0f));

    FavoritesAdapter adapter = new FavoritesAdapter(getActivity(), favorites);

    ListView listView = (ListView) rootView.findViewById(R.id.list_item);

    listView.setAdapter(adapter);
 }


 @Override
public boolean onQueryTextSubmit(String s) {
    return false;
}

@Override
public boolean onQueryTextChange(String string) {
    search(string);
    return true;
}

//This is the search method
public void search(String s) {
    if (s == null || s.trim().equals("")) {
        cleanSearch(); //In this method I just "reset" the adapter when the user "give up"
        return;
    }

    ArrayList<Favoritos> estacionamentosEncontrados = new ArrayList<Favoritos>(favoritos);

    for (int i = estacionamentosEncontrados.size() - 1; i >= 0; i--) {
        Favoritos estacionamento = estacionamentosEncontrados.get(i);
        Favoritos nenhumResultado = new Favoritos("Nenhum resultado encontrado");
        if (!estacionamento.mIndicacao.toUpperCase().contains(s.toUpperCase())) {
            estacionamentosEncontrados.remove(estacionamento);
        } else {
            estacionamentosEncontrados.add(nenhumResultado);
        }
    }

    adapter = new EncontradosAdapter(getActivity(), estacionamentosEncontrados);
    ListView listView = (ListView) getActivity().findViewById(R.id.list_item);
    listView.setAdapter(adapter);
}
和自定义适配器

public class FavoritesAdapter extends ArrayAdapter<Favorites> {


public FavoritesAdapter(Context context, ArrayList<Favorites> favorites){
    super(context, 0, favoritos);
}

public static class ItemViewHolder{
    TextView indicadorTextView;
    TextView enderecoTextView;
    TextView precoTextView;
    TextView horaAbreTextView;
    TextView horaFechaTextView;
    RatingBar notaEstacionamento;
    ImageView disponivelImg;
    TextView disponivelTextView;
    ImageView esconderView;

    public ItemViewHolder(View view){
        indicadorTextView = (TextView) view.findViewById(R.id.indicador);
        enderecoTextView = (TextView) view.findViewById(R.id.endereco);
        precoTextView = (TextView) view.findViewById(R.id.precoValor);
        horaAbreTextView = (TextView) view.findViewById(horaAbre);
        horaFechaTextView = (TextView) view.findViewById(horaFecha);
        notaEstacionamento = (RatingBar) view.findViewById(R.id.ratingBar);
        disponivelImg = (ImageView) view.findViewById(R.id.img_disponibilidade);
        disponivelTextView = (TextView) view.findViewById(R.id.disponivel);
        esconderView = (ImageView) view.findViewById(R.id.esconder_view_btn);

    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Check if an existing view is being reused, otherwise inflate the view
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.favorites_item, parent, false);
    }

    Favorites currentFavorito = getItem(position);

    final ItemViewHolder holder;

    if(listItemView.getTag() == null){
        holder = new ItemViewHolder(listItemView);
        listItemView.setTag(holder);
    } else {
        holder = (ItemViewHolder) listItemView.getTag();
    }

    if(currentFavorito.getDisponibilidade()){
        holder.disponivelTextView.setText(currentFavorito.getIndicacao());
    } else {
        holder.disponivelTextView.setText(currentFavorito.getIndicacao());
    }
    holder.indicadorTextView.setText(currentFavorito.getIndicacao());
    holder.enderecoTextView.setText(currentFavorito.getEndereco());
    holder.precoTextView.setText(currentFavorito.getPreco());
    holder.horaAbreTextView.setText(currentFavorito.getHoraAbre());
    holder.horaFechaTextView.setText(currentFavorito.getHoraFecha());
    holder.notaEstacionamento.setRating(currentFavorito.getAvaliacao());


    if(currentFavorito.getDisponibilidade()){
        holder.disponivelImg.setImageResource(R.drawable.ir_img);
        holder.disponivelTextView.setText(R.string.aberto);
        holder.disponivelTextView.setTextColor(getContext().getResources().getColor(R.color.verde));
    } else {
        holder.disponivelImg.setImageResource(R.drawable.fechado_img);
        holder.disponivelTextView.setText(R.string.fechado);
        holder.disponivelTextView.setTextColor(getContext().getResources().getColor(R.color.vermelho));        }

    return listItemView;
}
公共类FavoritesAdapter扩展了ArrayAdapter{
公共收藏夹适配器(上下文、ArrayList收藏夹){
超级(上下文,0,偏好);
}
公共静态类ItemViewHolder{
文本视图指示器文本视图;
TextView和TextView;
文本视图;
TextView和abretextview;
TextView horaFechaTextView;
额定值栏notestacionamento;
ImageView disponivelImg;
TextView DisponiveTextView;
ImageView-esconderView;
公共项目视图持有者(视图){
indicatorTextView=(TextView)view.findViewById(R.id.indicator);
enderecoTextView=(TextView)view.findViewById(R.id.endereco);
precoTextView=(TextView)view.findViewById(R.id.precoValor);
horaAbreTextView=(TextView)view.findViewById(horaAbre);
horaFechaTextView=(TextView)view.findViewById(horaFecha);
notestacionamento=(RatingBar)view.findViewById(R.id.RatingBar);
disponivelImg=(ImageView)view.findViewById(R.id.img_disponibilidade);
disponivelTextView=(TextView)view.findViewById(R.id.disponivel);
esconderView=(ImageView)view.findViewById(R.id.esconder\u view\u btn);
}
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//检查是否正在重用现有视图,否则会膨胀视图
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutFlater.from(getContext()).inflate(
R.layout.favorites(项目,父项,false);
}
收藏夹currentFavorito=getItem(位置);
最终项目视图持有者;
if(listItemView.getTag()==null){
holder=新项目视图holder(listItemView);
setTag(持有者);
}否则{
holder=(ItemViewHolder)listItemView.getTag();
}
if(currentFavorito.getDisponibilidade()){
holder.disponivelTextView.setText(currentFavorito.getIndicatacao());
}否则{
holder.disponivelTextView.setText(currentFavorito.getIndicatacao());
}
holder.indicatorTextView.setText(currentFavorito.getIndicatacao());
holder.enderecoxtview.setText(currentFavorito.getEndereco());
holder.precoTextView.setText(currentFavorito.getPreco());
holder.horabretextView.setText(currentFavorito.gethorabre());
holder.horaFechaTextView.setText(currentFavorito.getHoraFecha());
holder.notestacionamento.setRating(currentFavorito.getAvalicao());
if(currentFavorito.getDisponibilidade()){
holder.disponivelImg.setImageResource(R.drawable.ir_img);
holder.disponivelTextView.setText(R.string.aberto);
holder.disponivelTextView.setTextColor(getContext().getResources().getColor(R.color.verde));
}否则{
holder.disponivelImg.setImageResource(R.drawable.fechado_img);
holder.disponivelTextView.setText(R.string.fechado);
holder.disponivelTextView.setTextColor(getContext().getResources().getColor(R.color.vermelho));}
返回listItemView;
}

}

步骤:1在类似searchview的片段中创建选项菜单

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        //menu.clear();
        inflater.inflate(R.menu.ticket_fragment_search_menu, menu);
        MenuItem actionSearch = menu.findItem(R.id.action_search);

       SearchView searchView = (SearchView) MenuItemCompat.getActionView(actionSearch);
        searchView.setMaxWidth(Integer.MAX_VALUE);
        EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchEditText.setSingleLine(true);
        searchEditText.setTextColor(getResources().getColor(R.color.black));
        searchEditText.setHintTextColor(getResources().getColor(R.color.black));
        searchView.setQueryHint(getResources().getString(R.string.txt_search_here));
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                //apply Filter
                adapter.setFilter(newText)
                return false;
            }
        });

        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG, "search open");
            }
        });

        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                Log.e(TAG, "search close");
                return false;
            }
        });

    }
步骤2:在适配器中创建筛选或搜索功能

public void setFilter(String str) {
        aList = new ArrayList<>();
        if (aListTemp.size() > 0) {
            for (int i = 0; i < aListTemp.size(); i++) {
                if (aListTemp.get(i).toLowerCase().contains(str.toLowerCase())
                        ) {

                    aList.add(aListTemp.get(i));
                }
            }
        }
        notifyDataSetChanged();
    }
public void setFilter(字符串str){
aList=新的ArrayList();
如果(aListTemp.size()>0){
对于(int i=0;i
步骤:1在类似searchview的片段中创建选项菜单

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        //menu.clear();
        inflater.inflate(R.menu.ticket_fragment_search_menu, menu);
        MenuItem actionSearch = menu.findItem(R.id.action_search);

       SearchView searchView = (SearchView) MenuItemCompat.getActionView(actionSearch);
        searchView.setMaxWidth(Integer.MAX_VALUE);
        EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchEditText.setSingleLine(true);
        searchEditText.setTextColor(getResources().getColor(R.color.black));
        searchEditText.setHintTextColor(getResources().getColor(R.color.black));
        searchView.setQueryHint(getResources().getString(R.string.txt_search_here));
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                //apply Filter
                adapter.setFilter(newText)
                return false;
            }
        });

        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG, "search open");
            }
        });

        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                Log.e(TAG, "search close");
                return false;
            }
        });

    }
步骤2:在适配器中创建筛选或搜索功能

public void setFilter(String str) {
        aList = new ArrayList<>();
        if (aListTemp.size() > 0) {
            for (int i = 0; i < aListTemp.size(); i++) {
                if (aListTemp.get(i).toLowerCase().contains(str.toLowerCase())
                        ) {

                    aList.add(aListTemp.get(i));
                }
            }
        }
        notifyDataSetChanged();
    }
public void setFilter(字符串str){
aList=新的ArrayList();
如果(aListTemp.size()>0){
对于(int i=0;i
为什么不在列表中创建自己的serchview?我不知道,这是我的第一个项目。我认为这是最好的方法。我该怎么做?我以前试过。我在过滤器和定位搜索图标方面遇到了问题。您可以试试这个答案。这是我的工作,为什么你不在列表中创建自己的serchview?我不知道,这是我的第一个项目。我认为这是最好的方法。我该怎么做?我以前试过。我在过滤器和定位搜索图标方面遇到了问题。您可以试试这个答案。这是我的工作