Урок 17. Создание View-компонент в рабочем приложении

Обсуждение уроков
Аватара пользователя
pepsi
Сообщения: 3
Зарегистрирован: 19 янв 2015, 13:41

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение pepsi » 19 янв 2015, 14:06

кнопок на самом деле больше, они генерируются по определенным критериям из MySQL, и заполняются данными оттуда же. А при нажатии на сгенерированную кнопку я должен получать более подробную инфу по записи из базы.

На форуме конкретно по кнопкам не нашел, выше здесь же люди писали подобные вопросы - на них никто не отвечал.

Можете ли вы дать ссылку где это обсуждалось? Спасибо за быстрый ответ!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Foenix » 19 янв 2015, 14:37

да потому что уже много раз отвечали
поищи по слову "перебор" или "перебор компонентов" не помню точно.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
pepsi
Сообщения: 3
Зарегистрирован: 19 янв 2015, 13:41

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение pepsi » 21 янв 2015, 15:50

Foenix, спасибо!

По результатам поиска ничего конкретного не было. Но среди них были ключевые слова, с помощью которых я уже потом понял структуру и разобрался.

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение danek130995 » 27 янв 2015, 16:15

1)При попытке присвоить ID btnNew.setId(); перебрал всевозможные варианты ID-"212" "R.id.dff"-все подчеркивает красным, почему?
2) А чем отличаются методы llMain.removeAllViews(); и llMain.removeAllViewsInLayout();?
Спасибо огромное за ваши уроки!!

dimetradim
Сообщения: 1
Зарегистрирован: 08 фев 2015, 14:02

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение dimetradim » 08 фев 2015, 14:06

Я заметил, что радиокнопки не объявлялись и не инициализировались. Почему это не нужно? Ведь кнопки то объявили. В чем разница?

baturovshurik
Сообщения: 2
Зарегистрирован: 12 фев 2015, 22:59

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение baturovshurik » 12 фев 2015, 23:04

Ребята, подскажите пожалуйста

package com.example.application.myapplication;

import android.app.Activity;
import android.content.DialogInterface;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; ю ю ю юю

public class MainActivity extends Activity implements OnClickListener {

LinearLayout llMain;
и т.д.

Проблема следующая - подчеркивает OnClickListener и хочет переделать в андроид диалогчетатам.
в чем прикол. переписал урок. подчеркнуты "this" и вначале OnClickListener .
честно не знаю что делать. пишу в андроид студио.

baturovshurik
Сообщения: 2
Зарегистрирован: 12 фев 2015, 22:59

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение baturovshurik » 12 фев 2015, 23:19

Добавил в импорт
import android.view.View.OnClickListener;
и всё заработало. пздц

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 18 фев 2015, 19:48

Можно переопределить аппаратную клавишу меню.
Вот код:

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

     @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_MENU) {	
                event.startTracking();
           
                        //TODO: Implement this method
		//Например вывожу короткую инфу, о том что клавиша переопределена
	        Toast.makeText(this, "ПЕРЕОПРЕДЕЛЕНО", Toast.LENGTH_SHORT).show();

		return true;
		}
		return super.onKeyDown(keyCode, event);
	}

Информацию я нарыл здесь http://www.cyberforum.ru/android-dev/thread843920.html
Разумеется внутри, можно накодить своё альтернативно меню, так сказать. Применяя знания, полученные в этом уроке.


Но, я не пойму как, при втором нажатие аппаратной клавиши меню, убрать накоденное альтернативное меню?
Полосатенький Бочок

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 18 фев 2015, 21:08

Как найти по id эти динамически созданные кнопки?
Присвоил через setId. Найти стандартным способ не выходит, для того чтобы с ними потом работать.
Они в R.Java не прописываются?
Полосатенький Бочок

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение doter.ua » 18 фев 2015, 22:11

Хомка Хомячок писал(а):Как найти по id эти динамически созданные кнопки?
Присвоил через setId. Найти стандартным способ не выходит, для того чтобы с ними потом работать.
Они в R.Java не прописываются?
Кнопка1 = ....динамически создаем кнопку.
Сохраняй ссылку на Кнопка1, либо объявляй ее на уровне класса.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 19 фев 2015, 20:02

Хомка Хомячок писал(а): я не пойму как, при втором нажатие аппаратной клавиши меню, убрать накоденное альтернативное меню?
На 4PDA подсказали, но я понятия не имею как писать это.

План такой.

1.X=0

2.Если нажата кнопка меню, увеличивай значение X на единицу, затем дели полученное пополам, и присваивай это значение Y.

3.Бери дробную часть числа Y, если она равна нулю, то удаляй все View элементы.

4.Если не равна нулю, то ничего не делай.
Полосатенький Бочок

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение doter.ua » 19 фев 2015, 21:14

Хомка Хомячок писал(а):
Хомка Хомячок писал(а): я не пойму как, при втором нажатие аппаратной клавиши меню, убрать накоденное альтернативное меню?
На 4PDA подсказали, но я понятия не имею как писать это.

План такой.

1.X=0

2.Если нажата кнопка меню, увеличивай значение X на единицу, затем дели полученное пополам, и присваивай это значение Y.

3.Бери дробную часть числа Y, если она равна нулю, то удаляй все View элементы.

4.Если не равна нулю, то ничего не делай.
Пару моментов:
1) Когда используется экшен бар? - например, когда есть список действий, для которых не хочется отводить отдельное место на экране, т.е. спрятать их (в выпадающей менюшке или на самом экшен баре).
2) Когда используется контекстное меню? - никогда 8-) .
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 19 фев 2015, 22:14

doter.ua писал(а):
Я просто хочу сделать нормальное, по внешнему виду меню. Мной движет только то, что мне неприятен вид стандартного. Оно ущербное. Я очень удивляюсь, что большинство разработчиков, не делают меню собственного оформления. И оставляют ущербное андроидовское. Я хочу сделать свое, да с анимацией. И потом приткнуть его в свой недобраузер.
Но для начала, мне необходимо сделать альтернативное меню, состоящее хотя бы из одного элемента. Так как, если удастся сделать одноэлементное меню, то не трудно добавить больше.
Мне хочется видеть приятное на глаз меню. Только и всего.
Полосатенький Бочок

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 19 фев 2015, 23:34

Oй, я кажется наконец разобрался как это написать со счетчиком:

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

//не забудьте, там в начале обьявить:

        //int x=0;

	//int y;

	//int z;
	
//ниже по коду, t1 - это у меня элемент TextView.


	
//Для версия 1.х

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		//Проверяем какая кнопка была нажата

		if (keyCode == KeyEvent.KEYCODE_MENU) {


			/*выполняем нужные действия*/

		y=x++;//при каждом нажатии на аппаратную кнопку увеличиваем значение x на 1, и присваиваем это значение y

		z=y%2; //после чего, берем остаток от деления y на два, и присваиваем его z

//теперь наше z, будет иметь значение либо 0 либо 1.

			//и можно вводить иф

			if(z==1){  //если z равно единицы, то:

				t1.setText("значение z = "+z);//вместо этого можно программно создавать элементы альтернативного меню

			}
                                    else
	
                                t1.setText("значение z = "+z);//а затем их разрушать
//показываем, что обработали событие нажатия на клавишу, возвращая true

			return true;

		} 
		
return super.onKeyDown(keyCode, event);

	}
У меня всё вОркает :D
Полосатенький Бочок

Аватара пользователя
Хомка Хомячок
Сообщения: 16
Зарегистрирован: 03 фев 2015, 10:39
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Хомка Хомячок » 24 фев 2015, 22:44

Да что за ерунда. Метод removeAllViews(); после удаления элементов в одном из лайаутов, делает все остальное неактивным. В других лайаутах неактивно все.
Полосатенький Бочок

Ann1212
Сообщения: 2
Зарегистрирован: 01 мар 2015, 11:22

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Ann1212 » 01 мар 2015, 11:32

Увидела в уроке, что можно с помощью getChildCount() посчитать сколько кнопок создано. Я создала специальную кнопку Count, по нажатии на которую TextView должен измениться на количество созданных кнопок, но по нажатии приложение выключается :(
Подскажите, где моя ошибка?

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

public  class MainActivity extends Activity implements View.OnClickListener {

    LinearLayout llMain;
    RadioGroup rgGravity;
    EditText etName;
    Button btnCreate;
    Button btnClear;
    Button btnCount;
    TextView tvCount;


    int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        llMain = (LinearLayout) findViewById(R.id.llMain);
        rgGravity = (RadioGroup) findViewById(R.id.rgGravity);
        etName = (EditText) findViewById(R.id.etName);
        tvCount =  (TextView) findViewById(R.id.tvCount);

        btnCreate = (Button) findViewById(R.id.btnCreate);
        btnCreate.setOnClickListener(this);

        btnClear = (Button) findViewById(R.id.btnClear);
        btnClear.setOnClickListener(this);

        btnCount = (Button) findViewById(R.id.btnCount);
        btnCount.setOnClickListener(this);


    }

    @Override
    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);


                break;

            case R.id.btnCount:
                int c1;
                c1 = llMain.getChildCount();
                tvCount.setText(c1);
                break;

            case R.id.btnClear:
                llMain.removeAllViews();
                Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
                break;


        }

    }

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение klblk » 02 мар 2015, 08:37

Нужно читать документацию и понимать, что принимает на вход метод. В данном случае вы посылаете в него int, только он хочет int в виде id ресурса (например R.string.my_string), а не какое-то непонятное число c1.
Как исправить:
а) tvCount.setText(c1 + ""); //колхозный метод
б) tvCount.setText(String.valueOf(c1)); //более корректный метод

Vladimir991
Сообщения: 7
Зарегистрирован: 15 ноя 2014, 03:15

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Vladimir991 » 04 мар 2015, 14:25

Здравствуйте! Проект делал в Android Studio.
Все работает замечательно, но только не стирает. Не работает метод removeAllViews. Натолкните на ошибку пожалуйста.
Вот код MainActivity.java

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

public class MainActivity extends Activity implements OnClickListener {

    LinearLayout llMain;
    RadioGroup rgGravity;
    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.bntClear);
        btnClear.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnCreate:
                // Создание LayoutParams с шириной и высотой по содержимому
                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);

                break;
            case R.id.btnClear:
                llMain.removeAllViews();
                Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
                break;
        }
    }

}
Вот код activity_main.xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <RadioGroup
        android:id="@+id/rgGravity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rbLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="Left">

        </RadioButton>

        <RadioButton
            android:id="@+id/rbCenter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Center">


        </RadioButton>

        <RadioButton
            android:id="@+id/rbRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Right">

        </RadioButton>

    </RadioGroup>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/etName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:fadeScrollbars="true">

        </EditText>

        <Button
            android:id="@+id/btnCreate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Create">

        </Button>

        <Button
            android:id="@+id/bntClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Clear">

        </Button>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/llMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

    </LinearLayout>

</LinearLayout>

Алемарика
Сообщения: 7
Зарегистрирован: 17 фев 2015, 12:34

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Алемарика » 06 мар 2015, 22:50

Добрый вечер!

Наверное, я не по теме, но ближе темы не нашла.
Вопрос глупый, но зависла. У меня в EditText не вводятся русские буквы с клавиатуры. Меняю раскладку и все нормально начинает писать (на английском). А на русском ни в какую...

В activity_main.xml прописано:
<?xml version="1.0" encoding="utf-8"?>

Использую стандартный эмулятор, реальное устройство пока недоступно для проверки :(. Сможете подсказать в чем может быть проблема?

Заранее спасибо.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Foenix » 06 мар 2015, 23:27

я уже не помню что я делала
попробуй загуглить
http://stackoverflow.com/questions/9208 ... -simulator
http://stackoverflow.com/questions/1894 ... d-emulator
там говорят, что нужно установить доп. клавиатуру как приложение.
Установка - перетаскивание файла apk на эмулятор.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить