Страница 1 из 2

Неактивные кнопки циклом

Добавлено: 18 авг 2013, 17:14
Mr. Nobody
У меня есть 20 кнопок с id от level_1 до level_20
Подскажите, пожалуйста, как мне первые 10 кнопок сделать неактивными

Код: Выделить всё

for (int i=1; i <= 10; i++){
	    	String namebutton = "level_" + Integer.toString(i);
	    	namebutton.setEnabled(false);
	    }
Что-то вроде этого, но, естественно это не работает, так как там строка.

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 20:02
xr0m
Eval аналог? Не, нету. Используй массив кнопок

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 20:19
Foenix
я тебе ссылку давала, ты ее проигнорировал.

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 20:53
Mr. Nobody
Foenix писал(а):я тебе ссылку давала, ты ее проигнорировал.
Ссылку не видел, скиньте, пожалуйста, еще раз

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 20:55
Mr. Nobody
По аналогу с прошлым моим вопросом должно быть что-то такое

Код: Выделить всё

	    for (int i=1; i <= Constants.k; i++){
	    	String namebutton = "level_" + Integer.toString(i);
	    	int fullnamebutton = getResources().getIdentifier(namebutton, "drawable", getPackageName());
	    	fullnamebutton.setEnabled(false);
	    }

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 20:58
Mikhail_dev
А можно поинтересоваться, зачем 20 кнопок? Если это калькулятор, то что мешает по ID к ним обратиться? Или они созданы динамически? Если да, то что мешало создать статически? =)

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 21:00
Mr. Nobody
Это выбор уровня в игре, есть некое число K (сколько уровней из 20 пройдено), вот и нужно помечать пройденные K уровней :)

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 21:20
xr0m
no-- писал(а):А можно поинтересоваться, зачем 20 кнопок? Если это калькулятор, то что мешает по ID к ним обратиться? Или они созданы динамически? Если да, то что мешало создать статически? =)
20 однотипных статичных переменных? Мде... на скорость не повлияет, но качество и читабельность программы упадет.

Для уровней используй линк лист.

Re: Неактивные кнопки циклом

Добавлено: 18 авг 2013, 21:28
Foenix
Ссылка в прошлой твоей теме про кнопки и их id

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 12:35
Mr. Nobody
Foenix, спасибо, разобрался в коде, вроде все просто, но неожиданно вот такая ошибка

Код: Выделить всё

		Context mContext = getActivity().getBaseContext() ; 
		
		for (int position = 1; position < idOfButtons.length; position++) {
		   if (position < Integer.parseInt(savedText)){
			   Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", mContext.getPackageName());
			   Button btn = (Button) findViewById(btnId);
			   btn.setBackgroundColor(Color.BLUE);
		   }
		}

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 12:56
Foenix
да потому что этот метод для фрагмента, а ты находишься в активити, используй this

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 14:45
Mr. Nobody
Спасибо, при запуске вылетает

Код: Выделить всё

	Resources mRes;
	String[] idOfButtons;
OnCreate

Код: Выделить всё

		idOfButtons = new String [Constants.k + 1];
		
		idOfButtons[1] = "level_1";
		idOfButtons[2] = "level_2";
		idOfButtons[3] = "level_3";
		idOfButtons[4] = "level_4";
		idOfButtons[5] = "level_5";
		idOfButtons[6] = "level_6";
		idOfButtons[7] = "level_7";
		idOfButtons[8] = "level_8";
		idOfButtons[9] = "level_9";
		idOfButtons[10] = "level_10";
		idOfButtons[11] = "level_11";
		idOfButtons[12] = "level_12";
		idOfButtons[13] = "level_13";
		idOfButtons[14] = "level_14";
		idOfButtons[15] = "level_15";
		idOfButtons[16] = "level_16";
		idOfButtons[17] = "level_17";
		idOfButtons[18] = "level_18";
		idOfButtons[19] = "level_19";
		idOfButtons[20] = "level_20";
		
			
		for (int position = 1; position <= Constants.k; position++) {
		   if (position <= Integer.parseInt(savedText)){
			   Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", (this).getBaseContext().getPackageName());
			   Button btn = (Button) findViewById(btnId);
			   btn.setBackgroundColor(Color.BLUE);
		   }
		}
Если закомментировать последний цикл, то ошибки нет
Constant.k = 20

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 15:53
Foenix
а ошибку привести забыл, всегда нужно лог давать

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 18:48
Mr. Nobody
Да я хотел, но у меня почему-то логи не ведутся, я не знаю в чем дело
в LogCat вообще ничего не пишет, в LogCat (deprecated) пишет только Info и то без указания времени. (одни "?? ?? ??")

Код: Выделить всё

for (int position = 1; position <= Constants.k; position++) {
		   if (position <= Integer.parseInt(savedText)){
			   //Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", (this).getBaseContext().getPackageName());
			   //Button btn = (Button) findViewById(btnId);
			   //btn.setBackgroundColor(Color.BLUE);
		   }
		}
Вот так не вылетает

Код: Выделить всё

for (int position = 1; position <= Constants.k; position++) {
		   if (position <= Integer.parseInt(savedText)){
			   Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", (this).getBaseContext().getPackageName());
			   //Button btn = (Button) findViewById(btnId);
			   //btn.setBackgroundColor(Color.BLUE);
		   }
		}
Вот так вылетает

__
Сейчас вообще эмулятор тупит, наверное, надо на IDEA переходить..

__
Решение для время в логах нашел - http://stackoverflow.com/questions/8298 ... -change-it, сейчас попробую.

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 22:06
Mr. Nobody
Установил IDEA, вот логи

Код: Выделить всё

08-24 15:03:53.142: ERROR/AndroidRuntime(1781): FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kros/com.example.kros.LevelActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
        at android.app.ActivityThread.access$600(ActivityThread.java:141)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.NullPointerException
        at com.example.kros.LevelActivity.onCreate(LevelActivity.java:125)
        at android.app.Activity.performCreate(Activity.java:5133)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
        ... 11 more

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 22:37
Foenix
цитирую себя из другой темы
Foenix писал(а):NPE самая легкая ошибка.
Смотри.
находишь в логе вот такую строчку после строки Caused by:
с адресом в ТВОЕЙ программе, т.е.
at com.example.p0421_simplelist.MainActivity.onCreate(MainActivity.java:26)
щелкаешь сюда 2 раза мышью, и переносишься в код. На этой строке у тебя ИСПОЛЬЗУЕТСЯ переменная, которая не инициализировалась (не создана). А теперь смотришь в код выше данной строки, где она создается.
Там и ошибка. или адрес неверный (например, ресурс xml не найден) или вообще она нигде у тебя не создается, зато используется потом.
Попробуй сам найти.
у тебя это соответственно строчка в логе
at com.example.kros.LevelActivity.onCreate(LevelActivity.java:125)

Re: Неактивные кнопки циклом

Добавлено: 24 авг 2013, 23:34
Mr. Nobody

Код: Выделить всё

Integer btnId = mRes.getIdentifier("level_17", "id", (this).getBaseContext().getPackageName());
mRes есть

Код: Выделить всё

Resources mRes;
Массив убрал для проверки, просто написал строкой один id - "level_17" => все ок

остается

Код: Выделить всё

(this).getBaseContext().getPackageName()
, не очень понимаю эту строку, но, судя по примеру, тут тоже все верно.

Re: Неактивные кнопки циклом

Добавлено: 25 авг 2013, 00:01
Foenix
различай - объявление переменной Resources mRes
от ее создания
mRes = mContext.getResources();
ты же пытаешься ею воспользоваться, причем ее свойствами, или методами, но после объявления задан только ее тип, а содержания в ней нет - null. И ты из этого null пытаешься вытянуть какую-то информацию getIdentifier
а?

Re: Неактивные кнопки циклом

Добавлено: 25 авг 2013, 00:42
Mr. Nobody
Вы лучшая!)
Спасибо, все отлично работает

Re: Неактивные кнопки циклом

Добавлено: 25 авг 2013, 01:14
Foenix
засмущал ;)