Обработка нажатия кнопки ImageButton

166
27 февраля 2019, 04:50

Пишу приложение под android. Создал отдельное activity для словаря(приложение будет переводить слова из существующей базы и при подключении интернета ещё и онлайн). Создал это activity специально, чтобы отображать весь список слов, которые на данный момент находятся в базе. Из этого следует то, что на activity пришлось делать динамическую таблицу при помощи Inflater Моя реализация:

public void addRow(String c0, String c1, String c2) {
        TableLayout tableLayout = (TableLayout) findViewById(R.id.table);
        LayoutInflater inflater = LayoutInflater.from(this);
        TableRow tr = (TableRow) inflater.inflate(R.layout.table_row, null);
        TextView tv = (TextView) tr.findViewById(R.id.col1);
        tv.setText(c0);
        tv = (TextView) tr.findViewById(R.id.col2);
        tv.setText(c1);
        tv = (TextView) tr.findViewById(R.id.col3);
        tv.setText(c2);
        ImageButton imageButton = (ImageButton) tr.findViewById(R.id.col4);
        imageButton.setImageDrawable(getResources().getDrawable(R.drawable.ban_day));
        tableLayout.addView(tr);
    }

Реализация таблицы:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView android:id="@+id/col1"
              android:text=""
              android:layout_width="100dp"
              android:background="@drawable/text_view_border_night"
              android:layout_height="40dp"/>
    <TextView android:id="@+id/col2"
              android:text=""
              android:layout_width="184dp"
              android:background="@drawable/text_view_border_night"
              android:layout_height="40dp"/>
    <TextView android:id="@+id/col3"
              android:text=""
              android:layout_width="60dp"
              android:background="@drawable/text_view_border_night"
              android:layout_height="40dp"/>
    <ImageButton android:id="@+id/col4"
                 android:layout_width="16dp"
                 android:background="@drawable/text_view_border_night"
                 android:layout_height="40dp"/>
</TableRow>

Содержимое xml файла описывающего окно словаря:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="none"
        android:layout_weight="1">
    <TableLayout
                 android:id="@+id/table"
                 android:layout_width="fill_parent" android:layout_height="wrap_content">
    </TableLayout>
</ScrollView>

И возникает вопрос, а как обработать нажатие на динамически создаваемые кнопки "удалить из словаря" (это кнопки с крестиком)

Answer 1

В твоем случае вообще лучше не использовать Tablerow. У тебя будет создаваться под каждую строку новая вьюха и висеть в памяти, и при большом количестве твой завернутый в ScroolView Tablerow еще и будет подлагивать при прокрутке. Recyclerview + Adapter идеально подходит для таких задач, он переиспользует небольшое количество ранее созданных вью.

P.S Если тебе очень важен ответ конкретно на твой вопрос, то вод код:

private TableLayout tableLayout;
public void addRow(String c0, String c1, String c2) {
    LayoutInflater inflater = LayoutInflater.from(this);
    TableRow tr = (TableRow) inflater.inflate(R.layout.table_row, null);
    TextView tv = (TextView) tr.findViewById(R.id.col1);
    tv.setText(c0);
    tv = (TextView) tr.findViewById(R.id.col2);
    tv.setText(c1);
    tv = (TextView) tr.findViewById(R.id.col3);
    tv.setText(c2);
    ImageButton imageButton = (ImageButton) tr.findViewById(R.id.col4);
    imageButton.setImageDrawable(getResources().getDrawable(R.drawable.ban_day));
    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(view.getParent() instanceof TableRow) {
                TableRow tableRow = (TableRow) view.getParent();
                tableLayout.removeView(tableRow);
            }
        }
    });
    tableLayout.addView(tr);
}

И вынеси findViewbyid в onCreate()

READ ALSO
Система регистрации

Система регистрации

Всем приветВ общем, мне нужно сделать регистрацию в приложении

167
Почему GPS не работает на андроид?

Почему GPS не работает на андроид?

Нужен был GPS в приложении под андроидЕсть простой код(снизу) , он пару дней поработал а сейчас уже не работает

185
Как избавиться от потери строк Buffered Reader/Writer

Как избавиться от потери строк Buffered Reader/Writer

Суть в следующем: Читаю файл построчно с помощью BufferedReader

174
Убрать значение в периоде

Убрать значение в периоде

Как можно убрать значение в периоде в строке? те

192