Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
1

Список с двумя полями

02.12.2015, 05:15. Показов 2622. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Мне необходимо создать список, который содержит название спорт секции(например) и поле стоимость, которую вводит пользователь.
Я умею создавать только простой список через ArrayAdapter, которому в параметрах передается массив, содержащий элементы списка.
А вот как создать список с двумя полями, при чем одно из них сделать так, что бы пользователь сам вводил значение?
Была догадка сделать это с помощью создания класса, в котором 2 поля: название и стоимость. После чего с помощью ArrayList преобразовать это в массив объектов и построить из него список.
Но тут же возникает ошибка в том, что поле "стоимость" прописное,а не вводимое с клавиатуры.
Надеюсь на вашу помощь.

Не по теме:

Я не прошу вас писать за меня код программы, я САМ хочу ее написать, просто необходимо с кем то консультироваться. Благодарю за понимание.



Добавлено через 14 минут
Также я знаю как создать поле в которое вводиться значение, но как его тогда связать с моим списком? Что бы каждой секции соответствовала определенная стоимость
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2015, 05:15
Ответы с готовыми решениями:

Список в форме с двумя полями из двух таблиц
Добрый день! Нужно создать раскрывающийся список с двумя полями из разных связанных таблиц (Два...

Определите новый класс Student с двумя закрытыми полями полями: name и sumb
Я очередной студент, которые вам, полагаю, очень надоели, но все же я очень надеюсь на вашу помощь....

Определить класс Student с двумя закрытыми полями полями: name и sumb
Всем доброго дня. Помогите пожалуйста довести код до ума. Я что то никак не разберусь. Вот задание:...

Класс с двумя полями
подскажите class classrod { protected: float a; public: ...

25
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 102
02.12.2015, 07:16 2
т.е стоимость везде одна ? или есть массив цен ?
0
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 474
02.12.2015, 09:44 3
Пишите свой адаптер. http://startandroid.ru/ru/urok... apter.html
0
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
02.12.2015, 22:26  [ТС] 4
не то что бы массив
цены может рандомно задавать пользователь

Добавлено через 20 секунд
спасибо за урок
посмотрю

Добавлено через 18 минут
посмотрел урок
познавательно, но опят же цена задана
а мне ее надо вводить с клавиатуры
я бы не писал сюда не рассмотрев все варианты
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
02.12.2015, 22:41 5
umbrto, делаешь 2 экрана. Один список нажимая на пункт которого попадаешь на второй экран для заполнения выбранного пункта.
0
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 474
02.12.2015, 23:56 6
Mikalai, Так не интересно, человек же должен немного думать))
0
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
03.12.2015, 07:32 7
гы... ну давайте, человеки, придумайте теперь ОДИН экран и скролируемый список в полем ввода во второй колонке.
:-)
и не забудьте синхронизацию с сервером для введенных данных.

задачу не знаю, читаю с любопытством. может топикстартер расскажет полнее - тогда может чего будет в совет.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
03.12.2015, 14:22 8
Цитата Сообщение от bastrakov Посмотреть сообщение
гы... ну давайте, человеки, придумайте теперь ОДИН экран и скролируемый список в полем ввода во второй колонке
не уверен что я правильно понял вызов, но вот
активити по минимуму, там же класс-модель для секции (имя, цена) и интерфейс...можно оставить так, а можно по разным файлам раскидать
Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.sectionRv);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);
        //
        ArrayList<MySection> list = new ArrayList<>(); // создаем список секций
        fillArrayWithRandomPrices(list); // заполняем его ценами и названиями, метод заглушка
        recyclerView.setAdapter(new MyAdapter(list)); // создаем наш адаптер и назначаем его на RecyclerView
    }
 
    private void fillArrayWithRandomPrices(ArrayList<MySection> list) {
        for (int i = 0; i < 25; i++) {
            MySection section = new MySection("Название секции " + i);
            section.setPrice(i * 100);
            list.add(section);
        }
    }
 
}
 
class MySection {
    private String sectionName;
    private int price;
 
    MySection(String name) {
        sectionName = name;
    }
 
    public int getPrice() {
        return price;
    }
 
    public void setPrice(int price) {
        this.price = price;
    }
 
    public String getSectionName() {
        return sectionName;
    }
 
    public void setSectionName(String value) {
        sectionName = value;
    }
}
 
interface ChangeListener {
    void onEditTextValueChanged(int pos, int price);
}


адаптер с холдером
Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
 
import java.util.ArrayList;
 
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements ChangeListener {
 
    private final ArrayList<MySection> list;
 
    public MyAdapter(ArrayList<MySection> list) {
        this.list = list;
    }
 
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
        return new ViewHolder(v, this);
    }
 
    @Override
    public void onBindViewHolder(ViewHolder holder, int pos) {
        holder.nameTextView.setText(list.get(pos).getSectionName());
        holder.priceEditText.setText(String.valueOf(list.get(pos).getPrice()));
    }
 
    @Override
    public int getItemCount() {
        return list.size();
    }
 
    @Override
    public void onEditTextValueChanged(int pos, int value) {
        list.get(pos).setPrice(value);
    }
 
    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnFocusChangeListener {
        private ChangeListener listener;
        public TextView nameTextView;
        public EditText priceEditText;
 
        public ViewHolder(View v, ChangeListener listener) {
            super(v);
            this.listener = listener;
            nameTextView = (TextView) v.findViewById(R.id.sectionName);
            priceEditText = (EditText) v.findViewById(R.id.sectionPrice);
            priceEditText.setOnFocusChangeListener(this);
        }
 
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            EditText et = (EditText) v;
            int changedPrice = Integer.parseInt(et.getText().toString());
            if (!hasFocus) listener.onEditTextValueChanged(getAdapterPosition(), changedPrice);
        }
    }
}


разметка для активити по минимуму что бы проверить, файл main_activity.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/contentPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">
 
    <android.support.v7.widget.RecyclerView
        android:id="@+id/sectionRv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</FrameLayout>

и разметка item-а для RecyclerView файл row.xml
Кликните здесь для просмотра всего текста
XML
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
29
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <EditText
        android:inputType="number"
        android:id="@+id/sectionPrice"
        android:layout_width="100dp"
        android:layout_height="48dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true" />
 
    <TextView
        android:id="@+id/sectionName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/sectionPrice"
        android:layout_toLeftOf="@+id/sectionPrice"
        android:layout_toStartOf="@+id/sectionPrice"/>
 
    <FrameLayout
        android:layout_marginTop="4dp"
        android:layout_marginBottom="4dp"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:background="#21212121"
        android:layout_height="0.5dp"/>
</RelativeLayout>

тоже не глался за красотой, кому надо сами переделаете
в поле с ценой можно вводить только цифры, проверок на точку не ставил, тоже для самостоятельного изучения

критика приветствуется
5
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
03.12.2015, 15:06  [ТС] 9
Паблито, спасибо за код, но я хотел просто объяснения реализации данного списка
проверю как Ваш код работает
если возникнут вопросы не могли бы Вы ответить на них?

Добавлено через 1 минуту
Mikalai, в том то и проблема, что мне надо из списка выбрать несколько секций и ввести туда цену
а потом по нажатии на кнопку сохранить все это дело в файлик
только надо, что бы в файл не записывались секции без цены
разбиением на 2 активити я бы сделал)
а вот мне надо через одно
0
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
03.12.2015, 17:26 10
2Паблито: если топикстарнер не спасибкнет - я жамкну.
молодец! :-)
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
03.12.2015, 18:06 11
Паблито, а onFocusChanged() сработает если я закрою приложение кнопкой назад? А если через кнопку home? Если нет то лучше вешать textWatcher. Ну и можно без интерфейса обойтись по идее - прямо в листенере сетить новое значение. И интересно как работает getAdapterPosition() что-то описания не нашел.
0
1 / 1 / 0
Регистрация: 07.04.2015
Сообщений: 41
03.12.2015, 18:20 12
Даешь поиск по темам
ListView с несколькими TextView
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
03.12.2015, 18:39 13
Если нажать back когда то сначала уедет клавиатура. Следующее нажатие это выход из программы. По условию небыло сказано что надо сохранять данные между запусками программы
А если нажать Home и вернуться то значение в поле остается, а куда ему деваться?
Не совсем понимаю как спасет TextWatcher при нажатии на хоум или бэк?

Насчет сеттить значения прямо в листенере. Я считаю что этим должен заниматься не холдер, а адаптер.
Список хранится в адаптере, значит и доставать из списка элемент и менять в нем значение должен он. Но это как кому нравится.

Ну и это ведь просто демка, туда для полноты картины надо прикрутить прятание клавиатуры при клике мимо полей ввода, я не стал нагружать этим код.

Добавлено через 1 минуту
Цитата Сообщение от MisterMr Посмотреть сообщение
Даешь поиск по темам
ListView с несколькими TextView
listview используют только те, кто остал...сильно отстал
уже давно RecyclerView есть

Добавлено через 6 минут
Spelcrawler, да, забыл написать getAdapterPosition() это метод только холдера, не адаптера
и что бы сетить в холдере - туда надо предварительно передать ссылку на наш ArrayList, а сделать это проблематично потому что класс холдера - статический
вобщем ты попробуй сделать это, расскажешь так что бы кода получилось меньше чем у меня с интерфейсом
2
1 / 1 / 0
Регистрация: 07.04.2015
Сообщений: 41
03.12.2015, 19:01 14
И чем же неудобен лист ?)Паблито
0
Pablito
03.12.2015, 19:06
  #15

Не по теме:

MisterMr, не вижу смысла пересказывать то, что можно легко загуглить самостоятельно

0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
03.12.2015, 19:26 16
Паблито, согласен по всем пунктам, спасибо.
0
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
05.12.2015, 23:18  [ТС] 17
Паблито, я конечно извиняюсь, но у меня выдает ошибки при попытке запустить ваш код.
Ругается на кучу строк(одни из них):
Java
1
2
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Пишет "Cannot resolve symbol RecyclerView"
На сколько я понимаю, это у меня где то в SDK не установлено что то?

Добавлено через 5 часов 26 минут
Или таргет версия не та?

Добавлено через 6 минут
а все разобрался!
0
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 2
06.12.2015, 01:32 18
Тс в лс отпиши
0
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
06.12.2015, 03:55  [ТС] 19
Я только в этом топике узнал о recyclerView
Поэтому есть вопрос. В ListView был метод позволяющий из массива создать список asList() помоему.
А как в RecyclerView сделать, что бы элементы списка брались из массива? Через ArrayList?

Добавлено через 8 минут
И также у ListView был поиск, а как организовать поиск в RecycleView?
0
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 116
12.12.2015, 14:25  [ТС] 20
сори ребят уже во всем разобрался
всем кто пытался помочь по +
Спасибо!
0
12.12.2015, 14:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2015, 14:25
Помогаю со студенческими работами здесь

Зависимость между двумя полями
Допустим у меня есть 3 таблицы в первой атрибуты Код_диагноза и Код_препарата, во второй...

Создать класс с двумя полями
Здравствуйте, пишу код, не могу понять почему значение переменных из функции Sum не передаются в...

Реализовать класс с двумя скрытыми полями first и second
В с++ только начал разбираться, прошу помощи в решении задач. Задание: ООП – Задание № 1...

Создать класс с двумя полями и конструктором
Напишите пожалуйста класс содержащий два поля: фирма машины(строка), цена(число); конструктор и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru