Я создаю приложение для заказа еды в ресторане.Когда пользователь выбирает элемент, я нажимаю на нашем сервере, чтобы получить пакет JSON, содержащий параметры для этого элемента.(например: Хлеб: Белый, Пшеничный).
Я пытаюсь использовать специальный адаптер списка для создания списка всех параметров, которые пользователь должен выбрать перед добавлением товара в корзину.Это работает хорошо, за исключением того, что когда я нажимаю на счетчик, я получаю:
05-20 15:12:53.602: ERROR/AndroidRuntime(696): FATAL EXCEPTION: main
05-20 15:12:53.602: ERROR/AndroidRuntime(696): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@44e933d8 is not valid; is your activity running?
05-20 15:12:53.602: ERROR/AndroidRuntime(696):at android.view.ViewRoot.setView(ViewRoot.java:505)
05-20 15:12:53.602: ERROR/AndroidRuntime(696):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
05-20 15:12:53.602: ERROR/AndroidRuntime(696):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-20 15:12:53.602: ERROR/AndroidRuntime(696):at android.view.Window$LocalWindowManager.addView(Window.java:424)
и т.д ...
Это связано с передачей правильного контекста адаптеру массива, который яиспользую для прядильщика, но я чувствую, что перепробовал все возможные варианты.Этот блок является виновником:
ArrayAdapter<String> adapter = new ArrayAdapter<String> (parent.getContext(), android.R.layout.simple_spinner_item, options);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
attrSpinner.setAdapter(adapter);
Вот весь пользовательский адаптер списка, поэтому вы можете видеть, где я использую этот блок:
public class ItemListAdapter extends BaseAdapter {
public ItemListAdapter(Context context) {
Context mContext = context;
}
public int getCount() {
return attributes.length();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View attr_item = li.inflate(R.layout.menu_attributes, null);
TextView attrName = (TextView) attr_item.findViewById(R.id.attr_name);
CheckBox attrCheck = (CheckBox) attr_item.findViewById(R.id.attr_checkbox);
EditText attrText = (EditText) attr_item.findViewById(R.id.attr_edittext);
Spinner attrSpinner = (Spinner) attr_item.findViewById(R.id.attr_spinner);
try {
String attrID = attributes.getJSONObject(position).getString("AttrID");
String type = attributes.getJSONObject(position).getString("Type");
String itemLabel = attributes.getJSONObject(position).getString("ItemLabel");
JSONArray values = attributes.getJSONObject(position).getJSONArray("Values");
if (type.equals("select")) {
attrCheck.setVisibility(View.GONE);
attrText.setVisibility(View.GONE);
ArrayList<String> options = new ArrayList<String>();
for (int i=0;i<values.length();i++) {
options.add(values.getJSONObject(i).getString("Name"));
Log.i("value options", values.getJSONObject(i).getString("Name"));
}
//HERE IS THE PROBLEM
ArrayAdapter<String> adapter = new ArrayAdapter<String> (parent.getContext(), android.R.layout.simple_spinner_item, options);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
attrSpinner.setAdapter(adapter);
}
else if (type.equals("checkbox")){
attrSpinner.setVisibility(View.GONE);
attrText.setVisibility(View.GONE);
}
else if (type.equals("textarea")){
attrSpinner.setVisibility(View.GONE);
attrCheck.setVisibility(View.GONE);
}
else if (type.equals("text")){
attrSpinner.setVisibility(View.GONE);
attrCheck.setVisibility(View.GONE);
}
attrName.setText(itemLabel);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return attr_item;
}
Любая помощь очень ценится.Спасибо.