Диалог и массив отображаются очень хорошо, я просто хочу иметь возможность установить статическую переменную из исходного класса в onClick
, который находится в методе, который находится в другом классе. Все из try
, catch
и
<?>
были вещи, которые я вставил по настоянию компилятора:
public class Setter
{
public void myList(Context context, Class<?> thisclass, int arrayid, String choice)
{
return new AlertDialog.Builder(context)
.setItems(arrayid, new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
setChoice(thisclass, context, arrayid, which, choice);
}
})
.create();
}
public void setChoice(Class<?> thisclass, Context context, int arrayid, int which, String choice)
{
String[] array = context.getResources().getStringArray(arrayid);
try
{
Field f = thisclass.getDeclaredField(choice);
f.set(null, array[which]);
}
catch (SecurityException e)
{
e.printStackTrace();
}
catch (NoSuchFieldException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
}
public class ClassA extends Activity
{
static String stringa;
Setter setted = new Setter();
...
public void onCreate()
{
super.onCreate();
...
AlertDialog thinga = setted.myList(this, getclass(), R.array.thinga, stringa).show();
...
}
}
Когда я выбираю элемент из списка, я получаю это от отладчика:
ClassCache.findFieldByName(Field[], String) line: 438
Class.getDeclaredField(String) line: 666
Setter.setChoice(Class, Context, int, int, String) line: 45 // the line with the Field
Я думаю, что я пропускаю класс неправильно, но это немного не соответствует моей нынешней глубине.
У меня есть несколько разных классов, каждый со своими static String
с. Я передаю метод под именем String
(в choice
) и context
того, на что я надеялся, был оригинальный класс, который вызвал метод, который вызвал метод, который привел к приведенному ниже коду. Я надеялся, что смогу позвонить по номеру context.choice = something
, и аппарат прочитает это как ClassA.stringa = something;
как мне это сделать?
Вкратце, я хочу иметь список элементов, из которых пользователь может выбрать содержимое диалога, и чтобы их выбор был сохранен и доступен для класса, который вызвал создание диалога. Возможно, я все делаю неправильно, но мне надоело иметь дело с другими «клуджами», связанными с использованием блесен для того же.
Поскольку onClick
не может иметь неконечные объекты, объявленные в другом месте (по крайней мере, это мое понимание), я подумал, что, возможно, я мог бы обойти это, вызвав другой метод, setChoice
, который будет хранить значение того, что было выбран. Я бы определенно сказал, что это клочок, и мне бы очень хотелось, чтобы мне показали, как вы должны справляться с этими вещами.