Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
1

Как создавать custom view компоненты с функционалом и присваивать им id?

02.01.2017, 16:59. Просмотров 708. Ответов 5
Метки нет (Все метки)

Доброго времени суток) В моём приложении присутствует кнопка, для которой я хочу реализовать следующие действия:
1) Создать "блок", где будут 3 view компонента и выплывающие меню с checkbox'ами;
2) Каждому view компоненту присвоить свой индивидуальный id;
3) Блок можно будет удалить при помощи swipe вправо иль влево;
4) В каждом блоке будет view компонент, при клике на который будет срабатывать метод, которому нужны значения из view компонентов в "его" блоке.
Не могу найти нужные мне статьи уроки по данному вопросу, по этому я здесь)
Я так понимаю, что мне нужно создать xml для одного блока. Затем назначить на кнопку добавления этот "блока" в ListView(?), проинициализировать все компоненты в блоке, присвоить им id и задать на кнопку в блоке метод.
Однако столкнулся с проблемой: блок-то я создал в отдельном xml, но как добавить этот блок в главный_активити.xml ???
как проинициализировать и дать каждому компоненту id??
Помогите решить поставленные задачи)))
P.S.
Просто добавлять view компоненты у меня получилось, но присвоить им id и дать функционал - не-а))
На словах всё проговорил... сценарий, собственно, есть))
Ещё же нужно сохранять значения, которые будут выставлены в блоке. Подойдёт ли для этого SharedPreferences? Справится ли он для создания строк при создании очередного блока? Иль SQLite???
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2017, 16:59
Ответы с готовыми решениями:

Многократное использование Custom View - как
Привет всем, я новичок в андроид с опытом Java и Flash, и после пары дней бития головой об стену...

Библиотека или компоненты с функционалом, как в Microsoft Word
Добрый вечер форумчане, есть такой вопрос: существуют ли готовые библиотеки (для WPF), которые...

Как правильно создавать View?
Есть проект на веб формах, который нужно переписать под MVC проект. Главная проблема - как создать...

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

Как создавать собственные компоненты?
Нужно создать собственные компоненты. Например если при фокусе на компоненте Button пользователь...

5
Kir-malishev
71 / 71 / 57
Регистрация: 07.08.2016
Сообщений: 173
03.01.2017, 03:39 2
1)Можно создавать новый layout. Потом создать нужные view и присвоить их этому layout.
XML создавать для самого блока необязательно. В вертикальном layout элементы будут располагаться друг под другом.
Об этом можно почитать здесь:
http://startandroid.ru/ru/uroki/vse-...outparams.html
http://startandroid.ru/ru/uroki/vse-...ilozhenii.html
О создании диалогового окна с CheckBox'ами есть тут:
http://developer.alexanderklimov.ru/android/alertdialog.php

2)В процессе создания view можно указать id методом setId. Для других параметров view также имеет свои методы. Информация о них есть в документации:
https://developer.android.com/reference/android/view/View.html

3)Я пробовал реализовывать swipe этим классом:
http://stackoverflow.com/questions/4...swipe-gestures
Если честно, мне не очень понравилось, я не совсем понял как повесить его на весь layout. Буду рад, если кто предложит альтернативные решения.

SharedPreferences и, тем более, SQLite нужно использовать, если информация должна быть сохранена после закрытия приложения. В противном случае можно создать какой-нибудь двумерный ArrayList<ArrayList<String>> или ArrayList<HashMap<String, String>>, состоящий из ассоциированных массивов. Если нужно использовать в разных классах, то public static.

Я попробовал написать нечто похожее на Ваше описание. Я решил создать отдельный класс для блоков (просто интересно было). Но можно записывать все view в несколько ArrayList'ов. Так, возможно, меньше мороки. Архив на проект прилагаю.
1
Вложения
Тип файла: rar Custom.rar (236.4 Кб, 4 просмотров)
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
07.01.2017, 15:45  [ТС] 3
Цитата Сообщение от Kir-malishev Посмотреть сообщение
SharedPreferences и, тем более, SQLite нужно использовать, если информация должна быть сохранена после закрытия приложения.
А что больше подойдёт? SQLite или SharedPreferences?
0
Kir-malishev
71 / 71 / 57
Регистрация: 07.08.2016
Сообщений: 173
07.01.2017, 17:08 4
Всё зависит от задач.
В SharedPreferences данные записываются в виде ключ-значение. То есть он удобен для сохранения каких-то настроек, когда мы заранее знаем объём записываемых данных и определяем для каждого значения ключ.
А в базе данных мы создаём таблицу, в которой есть столбцы с каким-то названием. Их удобно использовать, когда есть неопределённое количество сущностей (строк) и определённое количество характеристик этих сущностей (столбцов). Наверно, в Ваше случае это будет удобно. Записываем каждый блок в отдельную строку, разбивая информацию из него по столбцами.
1
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 237
07.01.2017, 21:00  [ТС] 5
Цитата Сообщение от Kir-malishev Посмотреть сообщение
Всё зависит от задач.
Нужно сохранять выставленные пользователем значения. А при открытии приложения в нужные переменные, в textView, настройки кнопок.... выставить эти значения. Как при помощи SharedPreferences сохранить значения - я понял, практикую. Но вот как взять значения из SharedPreferences и заменить ими нужные переменные - я не понял. Происходит у меня это следующим образом: При первом запуске приложения запускается метод onResume(? если это так конечно)>откуда запускается метод сохранения всех нужных мне переменных и значений>затем срабатывает метод onCreate(? если это так конечно)>где я, приинициализировав все переменные и значения, запускаю метод загрузки, в котором я и должен перезаписать все нужные мне значения и переменные, взятые из sharedPreferences. Как мне это правильно сделать? (при условии, что порядок правильный). Пусть будет наглядный пример:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MainActivity extends AppCompatActivity {
    private static boolean checktime = false;
    SharedPreferences sharedPreferences;
    final String CHECKTIME = "checktime";
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Load_it();
}
protected void onResume() {
        super.onResume();
        if (sharedPreferences.getBoolean("firstrun", true)) {
            Save_it();
            sharedPreferences.edit().putBoolean("firstrun", false).apply();
        }
    }
private void Save_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(CHECKTIME, checktime);
        editor.apply();
    }
private void Load_it() {
    sharedPreferences = getPreferences(MODE_PRIVATE);
    sharedPreverences.getBoolean(); // Вот тут я и не понимаю, что мне нужно сюда вписать(если именно сюда вообще нужно вписывать), чтобы после того, как этот метод отработает, я использовал уже изменённое значение checktime???
}
}
Добавлено через 3 минуты
То есть, когда я вызову метод Save_it(), сохраню нужные мне "X" из другой части кода, то при следующем запуске я использовал именно этот X(то есть после отработки метода Load_it()
0
Kir-malishev
71 / 71 / 57
Регистрация: 07.08.2016
Сообщений: 173
08.01.2017, 00:51 6
Ну, вот, например, есть у нас CheckBox и EditText. Сначала в onCreate инициализируем элементы. Функцию сохранения вызываем по нажатию кнопки в обработчике нажатия. А функцию получения сохранённых значений вызываем в onCreate.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    private static final String DATA_FOR_BLOCKS = "DataForBlocks";
    CheckBox checkBox;
    EditText editText;
    
    public void saveIt()
    {
        
        SharedPreferences sharedPref = getSharedPreferences(DATA_FOR_BLOCKS, Context.MODE_PRIVATE);
        Editor editor = sharedPref.edit();
        editor.putString("text", editText.getText().toString());
        editor.putBoolean("isChecked", checkBox.isChecked());
        editor.apply();
    }
    
    public void loadIt()
    {
        SharedPreferences sharedPref = getSharedPreferences(DATA_FOR_BLOCKS, Context.MODE_PRIVATE);
        String text = sharedPref.getString("text", "");
        editText.setText(text);
        boolean isChecked = sharedPref.getBoolean("isChecked", false);
        checkBox.setChecked(isChecked);
    }
1
08.01.2017, 00:51
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2017, 00:51

Как динамически создавать компоненты на форме
Кароч вот составил такой код using System; using System.Windows.Forms; using System.Drawing;...

Как динамически создавать компоненты на форме
Здравствуйте, У меня возник такой вопрос, можно ли создать форму в vb6 без рисования, т.е....

Как динамически создавать компоненты на форме
Товарищи, требуется помощь. Возможно ли создать элементы формы через код, и если возможно - то как?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.