Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.211.34.178] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста. Я сделал таблицу с нумерацией. При добавлении строки все хорошо, даже когда удаляю часть строк, и создаю новые, он ставит нумерацию правильно, по количеству строк. Но когда я удаляю строку, он мне меняет номер только последней строки, а остальные остаются такие же. Последнюю удаляет ровно на столько, сколько строк осталось. То есть, было 6 строк. Удалил вторую, нумерация остается 1,3,4,5 а номер 6 становиться 2. А надо что бы все строки ниже удаляемой уменьшались на 1. Вот мой код отработки кнопки.
add_to.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(personal_account.getText().toString()) && !TextUtils.isEmpty(surname_child.getText().toString()) && !TextUtils.isEmpty(name_child.getText().toString()) && !TextUtils.isEmpty(patronymic_child.getText().toString())) { TableLayout tableLayout = (TableLayout) findViewById(R.id.table_children); LayoutInflater inflater = LayoutInflater.from(MainActivity.this); TableRow tr = (TableRow) inflater.inflate(R.layout.table_row_plus, null); number = (TextView) tr.findViewById(R.id.number); //нумерации строк при добавлении строки int aInt = table_children.getChildCount(); for (int m = 0; m < aInt; m++) { String aString = Integer.toString(m + 1); number.setText(aString); } fio_child = (TextView) tr.findViewById(R.id.fio_child); String tv1 = surname_child.getText().toString(); String tv2 = name_child.getText().toString(); String tv3 = patronymic_child.getText().toString(); Value1 = tv1 + " " + tv2 + " " + tv3; fio_child.setText(Value1); number_lc = (TextView) tr.findViewById(R.id.number_lc); String tv4 = personal_account.getText().toString(); number_lc.setText(tv4); //переопределяем ImageView, которые появляются со строками ImageView markOfTheRow = tr.findViewById(R.id.mark); markOfTheRow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); String myFio_child; TableRow tr = (TableRow)v.getParent(); TextView reb = (TextView) tr.getChildAt(1); myFio_child = reb.getText().toString(); builder.setMessage("Удалить: " + myFio_child + " ?"); builder.setCancelable(true); builder.setNegativeButton("нет", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("Да", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { tableLayout.removeView(tr); Toast.makeText(getApplicationContext(), "Ребенок удалён", Toast.LENGTH_SHORT).show(); //нумерация строк при удалении строки for (int m = 0; m < (aInt - 1); m++) { String aString = Integer.toString(m + 1); number.setText(aString); } } }); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); tableLayout.addView(tr); dialog.dismiss(); Toast.makeText(getApplicationContext(), "Ребенок добавлен", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Заполните все поля", Toast.LENGTH_SHORT).show(); } } }); |
Сообщ.
#2
,
|
|
|
единственное, чего добился это:
int aInt = table_children.getChildCount(); String aString = Integer.toString(aInt - 1); number.setText(aString); уменьшает цифру последней созданной строки. А мне надо что бы во всех строках менял цифры. Я не прошу готовый код, подскажите куда копать. Может я просто не понимаю куда двигать. Пробовал циклом for, но он тоже менял номер последней строки. Напишите алгоритм движения. И еще вопрос. Мне нужно выстраивать один столбец по алфавиту. Я правильно мыслю, сначала загнать таблицу в SQLite, затем вытаскивать столбец и сортировать его? |
Сообщ.
#3
,
|
|
|
Это архив который можно запустить и посмотреть.
Добавлено Цитата Vashnaemnik @ А как выкладывать архив? Пишет что превышен лимит по размеру. |
Сообщ.
#4
,
|
|
|
Выложи на яндекс/гугл диск, ссылку сюда.
|
Сообщ.
#5
,
|
|
|
Выложил код на яндекс диске
https://yadi.sk/d/q_ZsikZzxbazWQ |
Сообщ.
#6
,
|
|
|
Удаляешь ты строку в объекте tableLayout,
tableLayout.removeView(tr); Toast.makeText(getApplicationContext(), "Ребенок удалён", Toast.LENGTH_SHORT).show(); а нумерацию пытаешься менять в объекте number который не изменился. //изменение нумерации при удалении строки int aInt = table_children.getChildCount(); for (int m = 0; m < aInt; m++) { String aString = Integer.toString(aInt - 1); number.setText(aString); } Зачем ты ребёнков удаляешь, изувер. Добавлено Цитата Vashnaemnik @ уменьшает цифру последней созданной строки. Потому что экземпляр класса TextView создаётся в момент нажатия кнопки "Добавить" и циклом for (int m = 0; m < aInt; m++) { String aString = Integer.toString(aInt - 1); number.setText(aString); } Ты просто m раз меняешь надпись в последней добавленной строке. Судя по коду, писал методом тыка, не особо понимая что и зачем. В общем подтяни ООП. Добавлено Цитата Vashnaemnik @ Я правильно мыслю, сначала загнать ... Не правильно. Отложи в сторону android studio и полистай или погугли ООП(объектно-ориентированное программирование), |
Сообщ.
#7
,
|
|
|
Цитата Gonarh @ Удаляешь ты строку в объекте tableLayout, tableLayout.removeView(tr); Toast.makeText(getApplicationContext(), "Ребенок удалён", Toast.LENGTH_SHORT).show(); а нумерацию пытаешься менять в объекте number который не изменился. //изменение нумерации при удалении строки int aInt = table_children.getChildCount(); for (int m = 0; m < aInt; m++) { String aString = Integer.toString(aInt - 1); number.setText(aString); } Зачем ты ребёнков удаляешь, изувер. Добавлено Цитата Vashnaemnik @ уменьшает цифру последней созданной строки. Потому что экземпляр класса TextView создаётся в момент нажатия кнопки "Добавить" и циклом for (int m = 0; m < aInt; m++) { String aString = Integer.toString(aInt - 1); number.setText(aString); } Ты просто m раз меняешь надпись в последней добавленной строке. Судя по коду, писал методом тыка, не особо понимая что и зачем. В общем подтяни ООП. Добавлено Цитата Vashnaemnik @ Я правильно мыслю, сначала загнать ... Не правильно. Отложи в сторону android studio и полистай или погугли ООП(объектно-ориентированное программирование), Спасибо я знаю про свой косяк безграмотности в сфере ООП. Спасибо, разложили, все мои косяки по полкам но жить мне легче от этого не стало Добавлено Цитата Gonarh @ а нумерацию пытаешься менять в объекте number который не изменился. А почему не изменился? Разве number не входит в ту же строку? Она составная строки, и удаляется вместе с ней. |
Сообщ.
#8
,
|
|
|
Цитата Vashnaemnik @ А почему не изменился? Разве number не входит в ту же строку? Ещё раз. Объект number ты определяешь в момент добавления строки. Т.е. это, грубо говоря, ссылка на номер в самой последней строке. Соответственно в момент удаления ты обращаешься к этому объекту - номеру в самой последней строке Добавлено Мне не жалко, вот тебе ведро с рыбой. Пользуйся. Только придёшь в следующий раз, и попросишь сделать за тебя, а не указать направление - помощи не жди. public void onClick(DialogInterface dialog, int which) { tableLayout.removeView(tr); Toast.makeText(getApplicationContext(), "Ребенок удалён", Toast.LENGTH_SHORT).show(); int aInt = tableLayout.getChildCount(); for (int m = 1; m < aInt; m++) { TableRow tr = (TableRow)tableLayout.getChildAt(m); TextView number = (TextView) tr.getChildAt(0); number.setText(String.valueOf(m)); } } |