Страница 2 из 8
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 15 июн 2012, 08:29
DenBond7
KamiSempai писал(а):При повороте экрана Activity уничтожается и пересоздается заного, все элементы, созданные во время ее работы, пропадут. Отменить пересоздание можно в файле манифеста, в свойствах активности: android:configChanges="orientation"
Нет, это не вариант, так как у меня layout меняется.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 15 июн 2012, 08:34
DenBond7
damager82 писал(а):DenBond7 писал(а):Здраствуйте...интересный вопрос - если сменить ориентацию, то динамические обекты исчезают...как сохранить новосозданую иерархию Views
Урок 70 рассказывает, как быть при повороте. Иерархию Views (если она отлична от layout-файла) я думаю придется заново создавать после поворота.
Так вот в этом то й проблема...У меня динамически создаются spinners и соответственно у них уже будут состояния при повороте (пользователь уже что-то выберет). А при повороте мало того, что нужно нарисовать уже добавленные елементи, так еще и по очериде правильной и что б состояние имели прежние.
Ну я с этой проблемой разобрался....Так как Вы и сказали, пришлось писать метод, который сохраняет состояния и потом занова прорисовывать елементы!
Но все же хотелось, что бы это делалось автоматически.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 23 июн 2012, 00:13
daiz123
Объясните. Мы создаём кнопки. А как определить как из созданных кнопок нажата, например. И как создаются кнопки с одинаковым названием ведь я так понимаю btnNew это имя переменой,которое должно быть индивидуально,а у нас получается что несколько кнопок с таким именем,что то я не понимаю. Можно поподробней в этом моменте. Заранее благодарен.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 23 июн 2012, 11:08
KamiSempai
btnNew это не сама кнопка а ссылка на неё. Когда мы создаем кнопку ссылка записывается в эту переменную. Если создать еще одну кнопку предыдущая кнопка ни куда не исчезнет. Просто в переменной btnNew будет записана ссылка на другую кнопку.
Кнопки можно различать если установить для них разные ID. Сделать это можно при помощи setId(int id).
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 13 июл 2012, 10:25
smeh
Добрый день!
Есть небольшая проблема, пока не получилось справиться...
Код: Выделить всё
LinearLayout llButton = (LinearLayout)findViewById(R.id.llButton);
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(matchParent, wrapContent);
btExit = new Button(this);
btExit.setText("Выход");
btExit.setOnClickListener(this);
btBack = new Button(this);
btBack.setText("Назад");
btBack.setOnClickListener(this);
llButton.addView(btExit, lParams);
llButton.addView(btBack, lParams);
после добавления на экране появляется кнопка "Выход" во всю ширину экрана, кнопки "Назад" не видно вообще
если поменять местами последние 2 строчки, то видно только "Назад"...
wrapContent - по ширине меня не устраивает, мне надо чтобы обе кнопки делили поровну ширину экрана...
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 13 июл 2012, 12:36
AndreyI
Добавьте строку
lParams.weight=1;
Кнопки будут с одинаковым "весом", поэтому будут всегда делить свой layout поровну.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 13 июл 2012, 13:46
smeh
AndreyI писал(а):Добавьте строку
lParams.weight=1;
Кнопки будут с одинаковым "весом", поэтому будут всегда делить свой layout поровну.
СПАСИБО!!!!
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 15 июл 2012, 17:51
moreno
А у меня приложение выбивает ошибку:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.p0171_dynamiclayout2/com.example.p0171_dynamiclayout2.MainActivity}: java.lang.ClassCastException: android.widget.TextView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.widget.TextView
at com.example.p0171_dynamiclayout2.MainActivity.onCreate(MainActivity.java:32)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
... 11 more
Эмулятор выбил ошибку
"Application has stopped unexpectedly. Please try again."
Код программы в целом совпадает с тем, что на сайте.
"Примерный" код тоже не запускается. Что сделать с эклипсом или эмулятором?
Может кто поймет, в чем ошибка?
Заранее благодарен. Очень полезный сайт.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 16 июл 2012, 22:20
Finch
Caused by: java.lang.ClassCastException: android.widget.TextView
at com.example.p0171_dynamiclayout2.MainActivity.onCreate(
MainActivity.java:32)
включи нумерацию строк в едиторе (Window-Preferences-General-Editors-Text Editors - Show line numbers(галочкой отметь)) или просто клацни мышью 2 раза по строке в логкате и те6я перекинет на строку с оши6кой, вероятней всего у те6я 2 одинаковых ID в xml
код покажи
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 17 июл 2012, 20:43
moreno
Код: Выделить всё
package com.example.p0171_dynamiclayout2;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
RadioGroup rgGravity;
LinearLayout llMain;
EditText etName;
Button btnCreate;
Button btnClear;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
llMain = (LinearLayout) findViewById(R.id.llMain);
rgGravity = (RadioGroup) findViewById(R.id.rgGravity);
etName = (EditText) findViewById(R.id.etName);
btnCreate = (Button) findViewById(R.id.btnCreate);
btnCreate.setOnClickListener(this);
btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onClick(View v) {
switch(v.getId()){
case R.id.btnCreate:
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(wrapContent, wrapContent);
int btnGravity = Gravity.LEFT;
switch(rgGravity.getCheckedRadioButtonId()){
case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
case R.id.rbCenter:
btnGravity = Gravity.CENTER_HORIZONTAL;
break;
case R.id.rbRight:
btnGravity = Gravity.RIGHT;
break;
}
lParams.gravity = btnGravity;
Button btnNew = new Button(this);
btnNew.setText(etName.getText().toString());
llMain.addView(btnNew, lParams);
etName.setText(null);
break;
case R.id.btnClear:
llMain.removeAllViews();
Toast.makeText(this, "Cleared", Toast.LENGTH_SHORT).show();
break;
}
}
}
Я пока это приложение пропустил, но в
Уроке 19 появляется такая же ошибка в строке:
Код: Выделить всё
etNum1 = (EditText) findViewById(R.id.etNum1);
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 17 июл 2012, 21:16
Finch
Попро6уй сделай Project - Clean,
Вероятней всего у те6я не о6новился R.java и по линку на EditText находится не EditText
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 17 июл 2012, 21:37
moreno
Finch писал(а):Попро6уй сделай Project - Clean,
Вероятней всего у те6я не о6новился R.java и по линку на EditText находится не EditText
Не помогло...
Я приложения обычно запускаю на андроид 4.0 (AVD), но пробовал и на 2.3 - ошибка та же.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 18 июл 2012, 11:56
damager82
moreno писал(а):Не помогло...
Я приложения обычно запускаю на андроид 4.0 (AVD), но пробовал и на 2.3 - ошибка та же.
Попробуйте переименовать View в layout-е. Например, вместо etName напишите etName1, сохраните и исправьте соответственно ID элемента в Activity.
Иногда помогает.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 20 июл 2012, 18:00
Daniil
Здравствуйте, в mainactivity.java выдает ошибку, ругается на ссылки в case'ах
"case expressions must be constant expressions"
"case expressions must be constant expressions"
Сам код (копипаст с Вашего урока):
Код: Выделить всё
package ru.example.l17_dynamiclayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
LinearLayout llMain;
RadioGroup rgGravity;
EditText etName;
Button btnCreate;
Button btnClear;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
llMain = (LinearLayout) findViewById(R.id.llMain);
rgGravity = (RadioGroup) findViewById(R.id.rgGravity);
etName = (EditText) findViewById(R.id.etName);
btnCreate = (Button) findViewById(R.id.btnCreate);
btnCreate.setOnClickListener(this);
btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnCreate:
// Создание LayoutParams c шириной и высотой по содержимому
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
wrapContent, wrapContent);
// переменная для хранения значения выравнивания
// по умолчанию пусть будет LEFT
int btnGravity = Gravity.LEFT;
// определяем, какой RadioButton "чекнут" и
// соответственно заполняем btnGravity
switch (rgGravity.getCheckedRadioButtonId()) {
case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
case R.id.rbCenter:
btnGravity = Gravity.CENTER_HORIZONTAL;
break;
case R.id.rbRight:
btnGravity = Gravity.RIGHT;
break;
}
// переносим полученное значение выравнивания в LayoutParams
lParams.gravity = btnGravity;
// создаем Button, пишем текст и добавляем в LinearLayout
Button btnNew = new Button(this);
btnNew.setText(etName.getText().toString());
llMain.addView(btnNew, lParams);
etName.setText(null);
break;
case R.id.btnClear:
llMain.removeAllViews();
Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 20 июл 2012, 20:24
math64
Возможны два варианта:
1. Файл R.java неправильно сгенерирован
2. Вы залезли в файл R.java и что-то там отредактировали, несмотря на предупреждение в заголовке, что это делать нельзя.
В R.java константа должна быть объявлена public static final int btnCreate = 0x....;
Сделайте Project/Clean... или удалите файл R.java, чтобы он создался заново.
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 22 июл 2012, 13:00
moreno
damager82 писал(а):moreno писал(а):Не помогло...
Я приложения обычно запускаю на андроид 4.0 (AVD), но пробовал и на 2.3 - ошибка та же.
Попробуйте переименовать View в layout-е. Например, вместо etName напишите etName1, сохраните и исправьте соответственно ID элемента в Activity.
Иногда помогает.
Мои
etNum1 и
etNum2 указывали на поля типа TextView в main.xml, хотя должны были указывать на EditText.
Спасибо за помощь
Finch и
damager82
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 23 июл 2012, 20:15
math64
math64 писал(а):Возможны два варианта:
Возможен третий: вставлен
import andoid.R;
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 28 окт 2012, 20:23
yolops
почему eclips просит удалить @Override в onClick ?
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 28 окт 2012, 23:20
rezak90
yolops писал(а):почему eclips просит удалить @Override в onClick ?
если не ошибаюсь то версия Java наверное используется не 1.6
Re: Урок 17. Создание View-компонент в рабочем приложении
Добавлено: 20 ноя 2012, 15:50
RsH
непринципиальные вопросы
1) есть ли глубокий смысл объявлять wrapContent на уровне Activity? ведь это локальная переменная метода onСreate нет?
2) объекты после использования очищать нужно? (как в Delfy например) или мусорщик подчистит неиспользуемые экземпляры?