1

У меня проблема в моем приложении. Когда я пытаюсь выполнить поиск в своем приложении, и когда я нажму на предлагаемый список, он ответит, к сожалению, близко. Почему это ? Как это исправить ?Android Listview в AutocompleteTextview не отвечает

Я покажу вам свои коды и логарифм.

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); 
       } 
      } 
     }); 

} 

}

Main.java

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; 
} 


} 

AnimalsAdapter.java

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(); 
    } 

} 

} 

Logcat

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) 
+0

'ява .lang. ClassCastException: android.widget.ArrayAdapter не может быть добавлен в android.view.Menu' - возможно, вы захотите начать с этого? –

+0

Возможный дубликат [Почему я получаю ClassCastException и как его исправить?] (Http://stackoverflow.com/questions/15646686/why-do-i-get-a-classcastexception-and-how-do- i-fix-it) –

+0

есть. Как это исправить? можешь мне помочь ? – User19

ответ

0

использование ClassCastException

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

вместо

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

Редактировать

У вас есть два адаптер один локальная (тип String) другой глобальна (Основной тип)

autocomplete.setAdapter(this.adapter); 

не

autocomplete.setAdapter(adapter); 

здесь также используется локального переменного использование глобального

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

У вас есть два адаптера, один из которых локальный, а другой - глобальный

  1. Global AnimalAdapter типа Main, является потомком BaseAdapter
  2. Локальный ArrayAdapter типа Строка


Могу ли я узнать, почему эти два ??

+0

Я пытаюсь это сделать, но он получил ошибку (не может отбрасываться из String в Main) – User19

+0

Нельзя отбрасывать из String в Main – User19

+0

По-прежнему ошибка в 'Main item = (Main) adapter.getItem (position);' – User19

0

попробовать:

Main item = (Main) parent.getAdapter().getItem(position); 

вместо:

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

ваш Arrayadapter initilization должно быть:

final ArrayAdapter<Main> adapter_new = new ArrayAdapter<Main> 
    (this,android.R.layout.simple_list_item_1, animalslist); 

    autocomplete.setAdapter(adapter_new); 

вы используете String в качестве параметра, который является неправильным

+0

Он по-прежнему говорит, что, к сожалению, закрывается – User19

+0

проверить логарифм? – rafsanahmad007

+0

Это logcat (https://drive.google.com/open?id=0B6RV2bHcuy4uOGJfbnF1WjNhQmc) – User19