Android 过滤器后的错误位置

Android 过滤器后的错误位置,android,Android,我的申请有问题。事实上,我完全被卡住了。我有一个已实施clicklistener和searchview的国家列表。在一种情况下,当我单击一个给定的元素而不搜索列表时,所有内容都会正确显示并显示给定国家的信息。但当我搜索列表并单击元素时,应用程序将转到有关随机国家的信息。我不知道为什么会这样。我没有错。只有一个警告: W/IInputConnectionWrapper:在非活动InputConnection上完成合成文本 main活动 public static final String EXTR

我的申请有问题。事实上,我完全被卡住了。我有一个已实施clicklistener和searchview的国家列表。在一种情况下,当我单击一个给定的元素而不搜索列表时,所有内容都会正确显示并显示给定国家的信息。但当我搜索列表并单击元素时,应用程序将转到有关随机国家的信息。我不知道为什么会这样。我没有错。只有一个警告: W/IInputConnectionWrapper:在非活动InputConnection上完成合成文本

main活动

public static final String EXTRA_COUNTRY_NAME = "country_name";
public static final String EXTRA_COUNTRY_REGION = "country_region";
public static final String EXTRA_COUNTRY_NATIVE_NAME = "country_nativename";
public static final String EXTRA_COUNTRY_NAME_LANGUGES= "country_namelanguages";



private RecyclerView recyclerView;
private DataAdapter dataAdapter;
private List<ModelJsona> dataArrayList;





@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initViews();

}


private void initViews(){
    recyclerView=(RecyclerView) findViewById(R.id.card_recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
    loadJSON();
}

private void loadJSON(){
    dataArrayList = new ArrayList<>();
    Retrofit retrofit=new Retrofit.Builder().baseUrl("https://restcountries.eu/").addConverterFactory(GsonConverterFactory.create()).build();
    RequestInterface requestInterface=retrofit.create(RequestInterface.class);
    Call<List<ModelJsona>> call= requestInterface.getJSON();

    call.enqueue(new Callback<List<ModelJsona>>() {


        @Override
        public void onResponse(Call<List<ModelJsona>> call, Response<List<ModelJsona>> response) {
            dataArrayList = response.body();
            dataAdapter=new DataAdapter(getApplicationContext(),dataArrayList);
            recyclerView.setAdapter(dataAdapter);
            dataAdapter.setOnitemClickListener(MainActivity.this);

        }


        @Override
        public void onFailure(Call<List<ModelJsona>> call, Throwable t) {
            Log.e("Error",t.getMessage());
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main_menu, menu);

    MenuItem search = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
    search(searchView);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    return super.onOptionsItemSelected(item);
}

private void search(SearchView searchView) {

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            dataAdapter.getFilter().filter(newText);
            if (dataAdapter !=null)dataAdapter.getFilter().filter(newText);
            return true;
        }
    });
}


@Override
public void onItemClick(int position) {
    Intent detailsIntent = new Intent(this,Details.class);
    ModelJsona click = dataArrayList.get(position);


    detailsIntent.putExtra(EXTRA_COUNTRY_NAME,click.getName());
    detailsIntent.putExtra(EXTRA_COUNTRY_REGION,click.getRegion());
    detailsIntent.putExtra(EXTRA_COUNTRY_NATIVE_NAME,click.getNativeName());
    detailsIntent.putExtra(EXTRA_COUNTRY_NAME_LANGUGES,click.getLanguages().get(0).getName());


    startActivity(detailsIntent);

}
public静态最终字符串EXTRA\u COUNTRY\u NAME=“COUNTRY\u NAME”;
公共静态最终字符串EXTRA\u COUNTRY\u REGION=“COUNTRY\u REGION”;
公共静态最终字符串EXTRA\u COUNTRY\u NATIVE\u NAME=“COUNTRY\u nativename”;
公共静态最终字符串EXTRA\u COUNTRY\u NAME\u languages=“COUNTRY\u NAME languages”;
私人回收站;
专用数据适配器;
私有列表dataArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
私有void initViews(){
recyclerView=(recyclerView)findViewById(R.id.card\u recycler\u视图);
setLayoutManager(新的LinearLayoutManager(getApplicationContext());
loadJSON();
}
私有void loadJSON(){
dataArrayList=新的ArrayList();
改装改装=新改装.Builder().baseUrl(“https://restcountries.eu/).addConverterFactory(GsonConverterFactory.create()).build();
RequestInterface RequestInterface=reformation.create(RequestInterface.class);
Call Call=requestInterface.getJSON();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
dataArrayList=response.body();
dataAdapter=新的dataAdapter(getApplicationContext(),dataArrayList);
recyclerView.setAdapter(dataAdapter);
setOnitemClickListener(MainActivity.this);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Error”,t.getMessage());
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.主菜单,菜单);
MenuItem search=menu.findItem(R.id.search);
SearchView SearchView=(SearchView)MenuItemCompat.getActionView(搜索);
搜索(searchView);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
返回super.onOptionsItemSelected(项目);
}
专用无效搜索(SearchView SearchView){
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
dataAdapter.getFilter().filter(newText);
if(dataAdapter!=null)dataAdapter.getFilter().filter(newText);
返回true;
}
});
}
@凌驾
公共空间单击(内部位置){
Intent detailsinent=新的Intent(this,Details.class);
modeljsonaclick=dataArrayList.get(位置);
detailsinent.putExtra(额外的国家/地区名称,单击.getName());
detailsinent.putExtra(额外国家/地区,单击.getRegion());
detailsinent.putExtra(额外的国家/地区/本地名称,单击.getNativeName());
detailsinent.putExtra(额外的国家名称语言,点击.getLanguages().get(0.getName());
起始触觉(细节);
}
}

数据适配器

  private Context context;
private List<ModelJsona> dataList;
private List<ModelJsona> filtr;
private OnitemClickListener mListener;


public interface OnitemClickListener {
    void onItemClick (int position);
}

public void setOnitemClickListener (OnitemClickListener listener)
{
    mListener=listener;
}

public DataAdapter(Context context, List<ModelJsona> dataList) {
    this.context = context;
    this.dataList = dataList;
    this.filtr= dataList;

}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_row, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

    holder.country_name.setText(filtr.get(position).getName());
    holder.country_region.setText(filtr.get(position).getRegion());
    holder.country_nativename.setText(filtr.get(position).getNativeName());
    holder.country_languagename.setText(filtr.get(position).getLanguages().get(0).getName());





}

@Override
public int getItemCount() {
    return filtr.size();

}


public Filter getFilter() {

    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {

            String charString = charSequence.toString();

            if (charString.isEmpty()) {

                filtr = dataList;
            } else {

                ArrayList<ModelJsona> listadoprzeszukiwan = new ArrayList<>();

                for (ModelJsona wyszukiwarka : dataList) {

                    if (
                            wyszukiwarka.getName().contains(charString) ||
                            wyszukiwarka.getName().toLowerCase().contains(charString) ||
                            wyszukiwarka.getRegion().contains(charString) ||
                            wyszukiwarka.getRegion().toLowerCase().contains(charString) ||
                            wyszukiwarka.getNativeName().contains(charString) ||
                            wyszukiwarka.getNativeName().toLowerCase().contains(charString) ||
                            wyszukiwarka.getTopLevelDomain().contains(charString))


                             {

                        listadoprzeszukiwan.add(wyszukiwarka);
                    }
                }

                filtr = listadoprzeszukiwan;
            }

            FilterResults wynikiszukania = new FilterResults();
            wynikiszukania.values = filtr;
            return wynikiszukania;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults wynikiszukania) {
            filtr = (ArrayList<ModelJsona>) wynikiszukania.values;
            notifyDataSetChanged();
        }
    };
}


public class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView country_name, country_region,  country_languagename,country_nativename;


    public MyViewHolder(View itemView) {
        super(itemView);
        country_name = (TextView) itemView.findViewById(R.id.country_name);
        country_region = (TextView) itemView.findViewById(R.id.country_region);
        country_nativename = (TextView) itemView.findViewById(R.id.country_nativename);
        country_languagename= (TextView) itemView.findViewById(R.id.country_languagename);


    itemView.setOnClickListener((new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mListener !=null){
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    mListener.onItemClick(position);
                }
            }
        }
    }));


    }
}

}
私有上下文;
私有列表数据列表;
私有列表过滤器;
私人监听者;
公共接口侦听器{
无效单击(内部位置);
}
公共void setOnitemClickListener(OnitemClickListener侦听器)
{
mListener=监听器;
}
公共数据适配器(上下文上下文,列表数据列表){
this.context=上下文;
this.dataList=dataList;
this.filter=dataList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.card_行,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
holder.country_name.setText(filter.get(position.getName());
holder.country\u region.setText(filter.get(position.getRegion());
holder.country\u nativename.setText(filter.get(position.getNativeName());
holder.country_languagename.setText(filter.get(position.getLanguages().get(0.getName());
}
@凌驾
public int getItemCount(){
返回filter.size();
}
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
String charString=charSequence.toString();
if(charString.isEmpty()){
filter=数据列表;
}否则{
ArrayList listadoprzeszukiwan=新的ArrayList();
对于(ModelJsona wyszukiwarka:dataList){
如果(
wyszukiwarka.getName().contains(charString)||
wyszukiwarka.getName().toLowerCase().contains(charString)||
wyszukiwarka.getRegion()包含(字符字符串)||
wyszukiwarka.getRegion().toLowerCase().contains(字符串)||
wyszukiwarka.getNativeName().contains(字符串)||
wyszukiwarka.getNativeName().toLowerCase().contains(字符串)||
wyszukiwarka.GetToLevel域().contains(字符串))
{
listadoprzeszukiwan.add(wyszukiwarka);
}
}
filter=listadoprzeszukiwan;
   itemView.setOnClickListener((new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mListener !=null){
            int position = getAdapterPosition();
            String name = filtr.get(position).getName();
            for (int i=0 ; i <dataList.size() ; i++ ){
            if(name.equals(dataList.get(i).getName()){
            position = i; 
            break;
            }
            }
            if (position != RecyclerView.NO_POSITION) {
                mListener.onItemClick(position);
            }
        }
    }
}));