Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 AutocompleteTextview中的Android Listview没有响应_Java_Android_Listview_Autocompletetextview_Onitemclicklistener - Fatal编程技术网

Java AutocompleteTextview中的Android Listview没有响应

Java AutocompleteTextview中的Android Listview没有响应,java,android,listview,autocompletetextview,onitemclicklistener,Java,Android,Listview,Autocompletetextview,Onitemclicklistener,我的申请有问题。当我尝试搜索我的应用程序时,当我单击建议列表时,它将响应关闭。为什么会这样?我该如何解决这个问题 我会给你看我的代码和日志 MainActivity.java public class MainActivity extends Activity { AutoCompleteTextView autocomplete; Button clear; ListView lv; String[] animals_names; ArrayList<Main> anima

我的申请有问题。当我尝试搜索我的应用程序时,当我单击建议列表时,它将响应关闭。为什么会这样?我该如何解决这个问题

我会给你看我的代码和日志

MainActivity.java

public class MainActivity extends Activity  {

AutoCompleteTextView autocomplete;
Button clear;

ListView lv;
String[] animals_names;

ArrayList<Main> animalslist;
AnimalsAdapter adapter;

@SuppressWarnings("rawtypes")
Class[] classes = {
    Aa.class,
    Ab.class,
    Ac.class,
    Ad.class,
    Ae.class,
    Af.class,



};

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

    lv = (ListView) findViewById(R.id.list_view);
    autocomplete = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
    clear = (Button) findViewById(R.id.clear);
    clear.setVisibility(View.INVISIBLE);

    animals_names = getResources().getStringArray(R.array.animals_names);


    animalslist = new ArrayList<Main>();
    for (int i = 0; i < animals_names.length; i++) {
        Main country = new Main(i,animals_names[i], classes[i]);
        animalslist.add(country);
    }

    adapter = new AnimalsAdapter(getApplicationContext(), animalslist);

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>  
      (this,android.R.layout.simple_list_item_1, animals_names);


    autocomplete.setAdapter(this.adapter);
      autocomplete.setThreshold(1);

      autocomplete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          AnimalsAdapter adapter1;

          public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                Main item = (Main) adapter1.getItem(position);

                Intent d = new Intent(MainActivity.this, item.getClazz());
                startActivity(d);

                /** Fading Transition Effect */
                MainActivity.this.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

            }
        });

    autocomplete.addTextChangedListener(new TextWatcher() {

          @Override
          public void afterTextChanged(Editable s) {
              //do nothing
          }

          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
              //do nothing
          }

          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {
              if(s.length() != 0) {
                  clear.setVisibility(View.VISIBLE);
              } else {
                  clear.setVisibility(View.GONE);
              }
          }
      });

}
public class Main {
String name;
int id;
Class<?> clazz;

Main(int id, String name, Class<?> clazz) {
    this.name = name;
    this.clazz = clazz;
    this.id = id;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public void setClazz(Class<?> clazz) {
    this.clazz = clazz;
}

public Class<?> getClazz() {
    return clazz;
}
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


}
public class AnimalsAdapter extends BaseAdapter implements Filterable {

Context context;
ArrayList<Main> animalslist;
ArrayList<Main> mStringFilterList;
ValueFilter valueFilter;

AnimalsAdapter(Context context, ArrayList<Main> animalslist) {
    this.context = context;
    this.animalslist = animalslist;
    mStringFilterList = animalslist;
}

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

@Override
public Object getItem(int position) {
    return animalslist.get(position);
}

@Override
public long getItemId(int position) {
    return animalslist.indexOf(getItem(position));
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    convertView = null;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.b_animals_item, null);

        TextView name_tv = (TextView) convertView.findViewById(R.id.name);

        Main animal = animalslist.get(position);

        name_tv.setText(animal.getName());

    }
    return convertView;
}

@Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            ArrayList<Main> filterList = new ArrayList<Main>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ((mStringFilterList.get(i).getName().toUpperCase())
                        .contains(constraint.toString().toUpperCase())) {

                    Main country = new Main(mStringFilterList.get(i).getId(),mStringFilterList.get(i)
                                    .getName(), mStringFilterList.get(i).getClazz());


                    filterList.add(country);
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;

    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        animalslist = (ArrayList<Main>) results.values;
        notifyDataSetChanged();
    }

}

}
ClassCastException使用

Main item=(主)适配器.getItem(位置)

而不是

Main item = (Main) ((Menu) adapter).getItem(position);
编辑

02-04 02:07:17.079: E/AndroidRuntime(1035): FATAL EXCEPTION: main
02-04 02:07:17.079: E/AndroidRuntime(1035): Process: com.example.scientificnames, PID: 1035
02-04 02:07:17.079: E/AndroidRuntime(1035): java.lang.ClassCastException: android.widget.ArrayAdapter cannot be cast to android.view.Menu
02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.example.scientificnames.MainActivity$1.onItemClick(MainActivity.java:247)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:902)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView.access$500(AutoCompleteTextView.java:91)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1192)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView$3.run(AbsListView.java:3638)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Handler.handleCallback(Handler.java:733)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Looper.loop(Looper.java:136)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.app.ActivityThread.main(ActivityThread.java:5017)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at java.lang.reflect.Method.invokeNative(Native Method)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at java.lang.reflect.Method.invoke(Method.java:515)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-04 02:07:17.079: E/AndroidRuntime(1035):     at dalvik.system.NativeStart.main(Native Method)
您有两个适配器一个是本地(字符串类型),另一个是全局(主类型)

不是

这里还使用局部变量use global

Main item = (Main) adapter.getItem(position);
您有两个适配器,一个是本地适配器,另一个是全局适配器

Main item = (Main) adapter.getItem(position);
  • Main类型的全局AnimalAdapter是BaseAdapter的子级
  • 字符串类型的本地ArrayAdapter

  • 我可以知道为什么这两个???

    类castexception使用

    Main item=(主)适配器.getItem(位置)

    而不是

    Main item = (Main) ((Menu) adapter).getItem(position);
    
    编辑

    02-04 02:07:17.079: E/AndroidRuntime(1035): FATAL EXCEPTION: main
    02-04 02:07:17.079: E/AndroidRuntime(1035): Process: com.example.scientificnames, PID: 1035
    02-04 02:07:17.079: E/AndroidRuntime(1035): java.lang.ClassCastException: android.widget.ArrayAdapter cannot be cast to android.view.Menu
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.example.scientificnames.MainActivity$1.onItemClick(MainActivity.java:247)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:902)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView.access$500(AutoCompleteTextView.java:91)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1192)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.widget.AbsListView$3.run(AbsListView.java:3638)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Handler.handleCallback(Handler.java:733)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Handler.dispatchMessage(Handler.java:95)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.os.Looper.loop(Looper.java:136)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at android.app.ActivityThread.main(ActivityThread.java:5017)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at java.lang.reflect.Method.invokeNative(Native Method)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at java.lang.reflect.Method.invoke(Method.java:515)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    02-04 02:07:17.079: E/AndroidRuntime(1035):     at dalvik.system.NativeStart.main(Native Method)
    
    您有两个适配器一个是本地(字符串类型),另一个是全局(主类型)

    不是

    这里还使用局部变量use global

    Main item = (Main) adapter.getItem(position);
    
    您有两个适配器,一个是本地适配器,另一个是全局适配器

    Main item = (Main) adapter.getItem(position);
    
  • Main类型的全局AnimalAdapter是BaseAdapter的子级
  • 字符串类型的本地ArrayAdapter

  • 我可以知道为什么这两个吗???

    试试:

     Main item = (Main) parent.getAdapter().getItem(position);
    
    而不是:

    Main item = (Main) ((Menu) adapter).getItem(position);
    
    您的
    Arrayadapter
    初始化应该是:

    final ArrayAdapter<Main> adapter_new = new ArrayAdapter<Main>  
      (this,android.R.layout.simple_list_item_1, animalslist);
    
      autocomplete.setAdapter(adapter_new);
    
    final ArrayAdapter adapter\u new=new ArrayAdapter
    (这是android.R.layout.simple_list_item_1,animallist);
    自动完成。设置适配器(新适配器);
    
    您正在使用
    字符串
    作为参数,这是错误的

    请尝试:

     Main item = (Main) parent.getAdapter().getItem(position);
    
    而不是:

    Main item = (Main) ((Menu) adapter).getItem(position);
    
    您的
    Arrayadapter
    初始化应该是:

    final ArrayAdapter<Main> adapter_new = new ArrayAdapter<Main>  
      (this,android.R.layout.simple_list_item_1, animalslist);
    
      autocomplete.setAdapter(adapter_new);
    
    final ArrayAdapter adapter\u new=new ArrayAdapter
    (这是android.R.layout.simple_list_item_1,animallist);
    自动完成。设置适配器(新适配器);
    


    您正在使用
    String
    作为参数,这是错误的

    我尝试了一下,但它得到了错误(无法从字符串转换到主字符串)无法从字符串转换到主字符串
    Main item=(Main)adapter.getItem(position)中仍然存在错误适配器是本地的,在这里使用全局。为local和global指定不同的名称为什么两个适配器一个是local,另一个是globalI请尝试,但它出现了错误(无法从字符串转换到Main)无法从字符串转换到Main它仍然在
    Main item=(Main)adapter.getItem(position)中出错适配器是本地的,在这里使用全局。为本地和全局指定不同的名称为什么两个适配器一个是本地的,另一个是全局的java.lang.ClassCastException:android.widget.ArrayAdapter不能强制转换为android.view.Menu
    -可能要从这个开始?可能是重复的。如何解决这个问题?你能帮我吗?你能告诉我怎么做吗?哪一行是你的
    (MainActivity.java:247)
    行?
    java.lang.ClassCastException:android.widget.ArrayAdapter不能强制转换到android.view.Menu
    -可能要从这个开始?可能是重复的。如何解决这个问题?你能帮我吗?你能告诉我怎么做吗?哪一行是你的
    (MainActivity.java:247)
    行?它仍然说要检查logcat?这是logcat()使用不同的适配器变量..name..查看我的代码..当我删除
    并替换为
    时,它将在
    名称中出错)它仍然说不幸的是关闭检查logcat?这是logcat()使用不同的适配器变量..名称..参见我的代码..当我删除
    并替换为
    时,它将在
    名称中出错)