На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> remove tablerow , Не получается удалить строчку из таблицы
    Добрый день. Надеюсь мне с этим вопросом помогут.
    Есть страница пользователя, где он добавляем людей. Все отлично работает. В меню есть пункт добавить человека. Пользователь вводит данные, и строка добавляется в таблицу.
    Пример на картинке не могу прикрепить почему то.
    В каждой строке есть корзина, ее id mark.
    Но теперь мне надо, что бы при нажатии корзины, строка удалялась. Но никак не получается.
    Вот код страницы:
    ExpandedWrap disabled
      package com.example.monitoringchildrensnutrition;
       
      import androidx.annotation.NonNull;
      import androidx.annotation.Nullable;
      import androidx.appcompat.app.AlertDialog;
      import androidx.appcompat.app.AppCompatActivity;
      import androidx.appcompat.widget.Toolbar;
       
      import android.content.Context;
      import android.content.DialogInterface;
      import android.content.Intent;
      import android.content.SharedPreferences;
      import android.graphics.drawable.Drawable;
      import android.os.Bundle;
      import android.preference.PreferenceManager;
      import android.text.TextUtils;
      import android.text.style.BackgroundColorSpan;
      import android.util.AttributeSet;
      import android.view.LayoutInflater;
      import android.view.Menu;
      import android.view.MenuInflater;
      import android.view.MenuItem;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.ImageView;
      import android.widget.RelativeLayout;
      import android.widget.SeekBar;
      import android.widget.TableLayout;
      import android.widget.TableRow;
      import android.widget.TextView;
      import android.widget.Toast;
      import android.view.View.OnClickListener;
       
      import com.divyanshu.colorseekbar.ColorSeekBar;
      import com.google.android.material.bottomsheet.BottomSheetDialog;
       
      public class EducatorPage extends AppCompatActivity  implements OnClickListener {
       
          Toolbar toolbar;
          //изменение цвета
          View view;
          ColorSeekBar colorSeekBar;
          int i;
          Button btnColorTable;
          TextView name_educator;
          String Value;
          String Value1;
          //сохраняем данные
          SharedPreferences sharedPreferences;
          //берем сохраненные данные
          SharedPreferences preferences;
          //для добавления ребенка
          AlertDialog.Builder dialogBuilder;
          AlertDialog dialog;
          EditText personal_account, surname_child, name_child, patronymic_child;
          Button add_to, cancellation;
          //добавляем ребенка в таблицу
          TableLayout table_children;
          TableRow tr;
          TextView number, fio_child, number_lc, balance;
          //нумерация строк
          static int count = 1;
          //удаляем ребенка
          ImageView mark;
       
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.educator_page);
       
              toolbar = findViewById(R.id.toolbar_educator);
              setSupportActionBar(toolbar);
       
              view = (View) findViewById(R.id.view);
              colorSeekBar = (ColorSeekBar) findViewById(R.id.color_seekbar);
       
              btnColorTable = (Button) findViewById(R.id.btnColorTable);
              name_educator = (TextView) findViewById(R.id.name_educator);
              //невидимость для изменения цвета
              btnColorTable.setVisibility(View.INVISIBLE);
              colorSeekBar.setVisibility(View.INVISIBLE);
       
              //запоминаем ко всем данным
              sharedPreferences = getSharedPreferences("USER_DATA", MODE_PRIVATE);
              //берем сохраненные данные воспитателя
              preferences = getSharedPreferences("USER_DATA", MODE_PRIVATE);
              String name = preferences.getString("NAME", "");
              String surname = preferences.getString("SURNAME", "");
              String patronymic = preferences.getString("PATRONYMIC", "");
       
              //берем сохраненный цвет фона
              i = preferences.getInt("COLOR", i);
              view.setBackgroundColor(i);
       
              //вписываем нужный текст в TextView
              Value = "Воспитатель:" + " " + surname + " " + name + " " + patronymic;
              name_educator.setText(Value);
       
              //добавляем ребенка в таблицу
              table_children = (TableLayout) findViewById(R.id.table_children);
              tr = (TableRow) findViewById(R.id.row);
              balance = (TextView) findViewById(R.id.balance);
              mark = (ImageView) findViewById(R.id.mark);
       
          }
       
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              MenuInflater inflater = getMenuInflater();
              inflater.inflate(R.menu.menu_educator, menu);
              return true;
          }
       
          @Override
          public boolean onOptionsItemSelected(@NonNull MenuItem item) {
              int id = item.getItemId();
       
              if (id == R.id.color_table) {
                  btnColorTable.setVisibility(View.VISIBLE);
                  colorSeekBar.setVisibility(View.VISIBLE);
                  colorSeekBar.setOnColorChangeListener(new ColorSeekBar.OnColorChangeListener() {
                      @Override
                      public void onColorChangeListener(int i) {
                          view.setBackgroundColor(i);
       
                          //сохраняем выбранный цвет
                          SharedPreferences.Editor editor = sharedPreferences.edit();
                          editor.putInt("COLOR", i);
                          editor.apply();
       
                      }
                  });
                  btnColorTable.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          final AlertDialog.Builder builder = new AlertDialog.Builder(EducatorPage.this);
                          builder.setMessage("Подтверждаете ваш выбор?");
                          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) {
                                  btnColorTable.setVisibility(View.INVISIBLE);
                                  colorSeekBar.setVisibility(View.INVISIBLE);
                                  Toast.makeText(getApplicationContext(), "Цвет сохранен", Toast.LENGTH_SHORT).show();
                              }
                          });
                          AlertDialog alertDialog = builder.create();
                          alertDialog.show();
       
                      }
       
                  });
       
              } else if (id == R.id.add_child) {
                  dialogBuilder = new AlertDialog.Builder(this);
                  final View add_child = getLayoutInflater().inflate(R.layout.add_child, null);
                  personal_account = (EditText) add_child.findViewById(R.id.personal_account);
                  surname_child = (EditText) add_child.findViewById(R.id.surname_child);
                  name_child = (EditText) add_child.findViewById(R.id.name_child);
                  patronymic_child = (EditText) add_child.findViewById(R.id.patronymic_child);
                  add_to = (Button) add_child.findViewById(R.id.add_to);
                  cancellation = (Button) add_child.findViewById(R.id.cancellation);
                  dialogBuilder.setView(add_child);
                  dialog = dialogBuilder.create();
                  dialog.show();
       
                  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(EducatorPage.this);
                              //создаем строку
                              TableRow tr = (TableRow) inflater.inflate(R.layout.table_row_plus, null);
                              //находим ячейки и вставляем значения
                              number = (TextView) tr.findViewById(R.id.number);
                              //для нумерации строк
                              int aInt = count++;
                              String aString = Integer.toString(aInt);
                              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);
                              //добавляем строку
                              tableLayout.addView(tr);
                              dialog.dismiss();
       
                              Toast.makeText(getApplicationContext(), "Ребенок добавлен", Toast.LENGTH_SHORT).show();
                          } else {
                              Toast.makeText(getApplicationContext(), "Заполните все поля", Toast.LENGTH_SHORT).show();
                          }
       
                      }
                  });
       
                  cancellation.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          dialog.dismiss();
                      }
                  });
       
              } else if (id == R.id.exit) {
                  final AlertDialog.Builder builder = new AlertDialog.Builder(EducatorPage.this);
                  builder.setMessage("Вы действительно хотите выйти?");
                  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) {
                          Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                          startActivity(intent);
                      }
                  });
                  AlertDialog alertDialog = builder.create();
                  alertDialog.show();
       
              } else if (id == R.id.delete) {
                  Toast.makeText(getApplicationContext(), R.string.delete, Toast.LENGTH_SHORT).show();
              }
              return true;
          }
       
          @Override
          public void onClick(View v) {
              mark.setOnClickListener(new OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Toast.makeText(getApplicationContext(), "Строчка удалена", Toast.LENGTH_SHORT).show();
                  }
              });
          }
      }


    Подскажите, что у меня не так?
      Вопрос надо бы переместить/отразить в разделе Android. По имеющемуся «коду страницы» там с большей вероятностью смогут помочь.

      Я был бы рад воспроизвести баг и попробовать его исправить, но я не Android-разработчик и хотелось бы, чтобы попробовать помочь, иметь проект целиком (если там есть что-то секретное — то урезанный до минимального воспроизведения ошибки).

      Вслепую, первое, что смущает (хотя, может, так и задумано) — обработчик onClick для корзины (mark) создаётся внутри другого обработчика onClick.
      Не получается именно удалить или сообщение "Строчка удалена" тоже не выводится?
      Срабатывает ли первичный onClick, который вешает Listener на корзину?
      Сообщение отредактировано: kopilov -
        Цитата kopilov @
        Вопрос надо бы переместить/отразить в разделе Android. По имеющемуся «коду страницы» там с большей вероятностью смогут помочь.

        Я был бы рад воспроизвести баг и попробовать его исправить, но я не Android-разработчик и хотелось бы, чтобы попробовать помочь, иметь проект целиком (если там есть что-то секретное — то урезанный до минимального воспроизведения ошибки).

        Вслепую, первое, что смущает (хотя, может, так и задумано) — обработчик onClick для корзины (mark) зоздаётся внутри другого обработчика onClick.
        Не получается именно удалить или сообщение "Строчка удалена" тоже не выводится?
        Срабатывает ли первичный onClick, готорый вешает Listener на корзину?

        При старте данной страницы, там нет никакой таблицы, только шапка. Следовательно ImageView тоже нет. Она появляется первая, только когда пользователь вводит первого человека.
        Я пытался внутри onClick ввода первого человека это завести, но он ругался, и приложение слетало.
        А в какое место вы бы поставили вызов mark? Я тут совсем новичок, может и не так делаю.
        Сообщение не выходит. Я пока по нему и пытаюсь определить, работает или нет.
        Сообщение отредактировано: Vashnaemnik -
          Обсудили в личке.
          Для тех, кто будет читать тему: проблема была в том, что Listener вешался на шаблонный экземпляр компонента, а надо было на создаваемый inflate-ом.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0313 ]   [ 15 queries used ]   [ Generated: 28.01.23, 08:02 GMT ]