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