С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 2

Сохранить измененные значения EditText в ListView при прокрутке

25.11.2013, 11:37. Показов 3131. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, прошу помощи, т.к. уже долго и безрезультатно пытаюсь решить следующую
задачу:

Есть Листвью с названиями товаров , состоящих из TextView-названий и EditText-весом/шт.
Значение EditText меняется по нажатию на Button "+".
При нажатии на кнопку значение EditText меняется и товар сохраняется "в корзину".

Проблема следующая: при прокрутке все сбивается и значения поля "вес/шт" меняются сами по себе.

Основной класс:
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
public class MainActivity extends Activity {
 
  ArrayList<Product> products = new ArrayList<Product>();
  BoxAdapter boxAdapter;
 
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    // создаем адаптер
    fillData();
    boxAdapter = new BoxAdapter(this, products);
 
    // настраиваем список
    ListView lvMain = (ListView) findViewById(R.id.lvMain);
    lvMain.setAdapter(boxAdapter);
  }
 
  // генерируем данные для адаптера
   
  
  void fillData() {
      products.add(new Product("Помидоры", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("Огурцы", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("Перец", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("Бананы", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("Апельсины", 60, R.drawable.ic_launcher, false,3));
      products.add(new Product("Мандарины б/кост", 60, R.drawable.ic_launcher, false,2));
      products.add(new Product("Яблоки красные", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("Груша конференц", 60, R.drawable.ic_launcher, false,0));
      products.add(new Product("хуярма", 60, R.drawable.ic_launcher, false,0));
      
//   for (int i = 1; i <= 20; i++) {
//     products.add(new Product("Product " + i, i * 1000,
//         R.drawable.ic_launcher, false));
//   }
  }
 
  // выводим информацию о корзине
  public void showResult(View v) {
    String result = "Товары в корзине:";
    for (Product p : boxAdapter.getBox()) {
      if (p.box)
        result += "\n" + p.name+" "+p.ves+" кг";
    }
    Toast.makeText(this, result, Toast.LENGTH_LONG).show();
  }
  
  
}

Адаптер:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
public class BoxAdapter extends BaseAdapter {
  Context ctx;
  LayoutInflater lInflater;
  ArrayList<Product> objects;
 
  BoxAdapter(Context context, ArrayList<Product> products) {
    ctx = context;
    objects = products;
    lInflater = (LayoutInflater) ctx
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }
 
  // кол-во элементов
  @Override
  public int getCount() {
    return objects.size();
  }
 
  // элемент по позиции
  @Override
  public Object getItem(int position) {
    return objects.get(position);
  }
 
  // id по позиции
  @Override
  public long getItemId(int position) {
    return position;
  }
 
  // пункт списка
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    // используем созданные, но не используемые view
    View view = convertView;
    if (view == null) {
      view = lInflater.inflate(R.layout.item, parent, false);
    }
 
    Product p = getProduct(position);
 
    // заполняем View в пункте списка данными из товаров: наименование, цена
    // и картинка
    ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
    ((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
    ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);
 
 
 
    EditText etves = (EditText) view.findViewById(R.id.tv);
    etves.setText(String.valueOf(p.ves));
    Button btnplus = (Button) view.findViewById(R.id.button1);
    
    etves.setTag(position);
    TextWatcherP inputTextWatcher= new TextWatcherP(etves);
    etves.addTextChangedListener(inputTextWatcher); 
    
    if (p != null) {
            
        btnplus.setTag(etves);
        btnplus.setOnClickListener(
                new OnClickListener() {
            @Override
            public void onClick(View v) {
                float vves;
                
                vves = Float.parseFloat((((EditText)v.getTag()).getText()).toString());
                ++vves;
                ((EditText)v.getTag()).setText(String.valueOf(vves));
                
                
            }
        
    }); 
           
        
        
    }
    
 
    
 
        
    return view;
  }
 
  // товар по позиции
  Product getProduct(int position) {
    return ((Product) getItem(position));
  }
 
  // содержимое корзины
  ArrayList<Product> getBox() {
    ArrayList<Product> box = new ArrayList<Product>();
    for (Product p : objects) {
      // если в корзине
      if (p.ves>0)
          p.box=true;
        box.add(p);
    }
    return box;
  }
 
  
  
  public class TextWatcherP implements TextWatcher {
      public EditText editText;
      public Float vves;
      public TextWatcherP(EditText et){
          super();
          editText = et;
      }
    
      public void afterTextChanged(Editable s) {
          getProduct((Integer) editText.getTag()).ves = vves;
          
      }
      
      public void beforeTextChanged(CharSequence s, int start, int count, int after){
          
      }
      
      public void onTextChanged(CharSequence s, int start, int before, int count) {
          vves=Float.parseFloat(editText.getText().toString());
          
          
      }
};
 
 
}
причем когда "снимаем" значение с эдиттекста до изменения текста, то все сохраняется как надо, но без последнего нажатия.

Java
1
2
3
4
5
6
7
8
9
10
public void afterTextChanged(Editable s) {
          getProduct((Integer) editText.getTag()).ves = vves;
          
      }
 
public void beforeTextChanged(CharSequence s, int start, int count, int after){
          vves=Float.parseFloat(editText.getText().toString());
      }
      
public void onTextChanged(CharSequence s, int start, int before, int count) {
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2013, 11:37
Ответы с готовыми решениями:

Прокрутка ListView в начало при обновлении EditText
Всем привет! Проблема следующая - имеется ListView с адаптером. Элементы ListView - кастомные вьюшки с EditText. Если список очень большой,...

Белый фон при прокрутке listview и actionbar в android 2.1
При прокрутке ListView на Android 2.3 появляется белый фон. Ставил Cache Color Hint на прозрачный или на цвет фона, не помогает. Как это...

Как сохранить текст с EditText при переходе на другую Activity?
проблема такая что не могу реализовать EditText сохраняет данные в буфер или еще куда-то при переходе на следующую Acitivity

2
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.11.2013, 17:48
в getView нужно выставлять правильные значения.
0
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 2
26.11.2013, 11:02  [ТС]
Не могли бы вы пояснить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2013, 11:02
Помогаю со студенческими работами здесь

При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Здравствуйте. Использую listview и item с текстом и изображениями. При прокрутке listview изображения подгружаются, но происходит...

EditText смещается вниз при вводе текста, который занимает объём больше, чем EditText
EditText сещается вниз при вводе текста который занимает обём больше чем EditText. Как устранить?

Фильтрация ListView из EditText
Не могу разобраться с фильтрацией в ListView. Фильтрация происходит правильно (находит нужное количество), но выводит не те, которые нужно...

Создание ListView из EditText
Выдает ошибку в строке при создании адаптера. Пишет, что не распознает конструкцию ArrayAdapter Ниже прилагаю код. Список должен...

EditText.Listener внутри ListView
Добрый день. Помогите пожалуйста с задачкой. У меня есть ListView, который пополняется записями типа(TextView/EditText), количество...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru