Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
EVGEN-2208
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 2
#1

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

25.11.2013, 11:37. Просмотров 1344. Ответов 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) {
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 11:37     Сохранить измененные значения EditText в ListView при прокрутке
Посмотрите здесь:
Прокрутка ListView в начало при обновлении EditText Android
Белый фон при прокрутке listview и actionbar в android 2.1 Android
Как сохранить текст с EditText при переходе на другую Activity? Android
Android При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Фильтрация ListView из EditText Android
Создание ListView из EditText Android
EditText в одном из Item ListView Android
EditText.Listener внутри ListView Android
Живой поиск через один EditText в разных Listview ? Android
Как при построении Listview выибрать картинку в зависимости от значения в БД? Android
Необходимо считать значения из edittext Android
Android Получение значения EditText (number)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.11.2013, 17:48     Сохранить измененные значения EditText в ListView при прокрутке #2
в getView нужно выставлять правильные значения.
EVGEN-2208
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 2
26.11.2013, 11:02  [ТС]     Сохранить измененные значения EditText в ListView при прокрутке #3
Не могли бы вы пояснить?
Ответ Создать тему
Опции темы

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