Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
alegator74
2 / 2 / 0
Регистрация: 21.08.2016
Сообщений: 17
#1

TableLayout как отловить значение строки по нажатию (для Android на Java)?

21.08.2016, 18:06. Просмотров 873. Ответов 8

Я только начинающий, прошу помочь по возможность, уже 2 день ищу информацию так и не понял как реализовать. Необходимо по нажатию на табличной части tableLayout отловить все значения колонок которые находятся в строке по которую нажали. Код такой:


1.ZakazSpisok.java

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;
 
/**
 *
 * @author 1
 */
public class ZakazSpisok extends Activity implements View.OnClickListener {
    
    TextView currentDateTime;
    Calendar dateAndTime=Calendar.getInstance();
    TableLayout tableLayout;
    
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.zakazforms);
          
                tableLayout = (TableLayout)findViewById(R.id.table);
                
                currentDateTime=(TextView)findViewById(R.id.currentDateTime);
                setInitialDateTime();
                
                int z_data = 100; //Дата заказа
                String z_out = " + "; //Отправлена
                String z_klient = "ddddddddddtttttttttttttttttttttttttttttttttttttttddddd"; //клиент заказа
                String z_adress = "ggggggggggggggffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggg"; //Адрес заказа
                int z_summa = 20; //Сумма заказа
                int day = 0; //Счётчик заявок
 
                //Используем цикл, в котором будем для нашей таблицы выводить заявки
                while (z_data > 0) {
                  day++; //Счётчик заявок увеличиваем в начале цикла, т.к. начальное значение у него 0
                  
                  z_data = z_data-1;
 
                  //Передаём в метод добавления строки вычисленные значения
                  addRow(day, z_out, z_data, z_klient, z_adress,z_summa);
                }
                
                 
                 tableLayout.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        
                        //[COLOR="Red"]ЧТО СДЕСЬ ПРОПИСАТЬ ЧТОБЫ ОТЛОВИТЬ СТРОКУ ПО КОТОРОЙ КЛИКНУЛИ И [/COLOR]
                        //[COLOR="red"]ПОЛУЧИТЬ ВСЕ ЗНАЧЕНИЯ КОЛОНОК ЭТОЙ СТРОКИ?[/COLOR]
                        
                         //for (int i = 0; i < tableLayout.getChildCount(); i++){
                        //думаю получил строку в зоне видимости планшета, а значит и места куда нажали      
        
                        //TableRow tablerow = (TableRow)tableLayout.getChildAt(i);
        
                        //for (int j = 0; j < tablerow.getChildCount(); j++) {
 
                        //    TextView tv = (TextView) tablerow.getChildAt(j);
                        //    String s = tv.getText().toString();
                        //}
                        
                        
                    }                
                 
                });
                 
                
    }
        
   public void addRow(int c0, String c2, int c1, String c3, String c4, int c5) {
    //Сначала найдем в разметке активити саму таблицу по идентификатору
    //TableLayout tableLayout = (TableLayout) findViewById(R.id.table);
    //Создаём экземпляр инфлейтера, который понадобится для создания строки таблицы из шаблона. В качестве контекста у нас используется сама активити
    LayoutInflater inflater = LayoutInflater.from(this);
    //Создаем строку таблицы, используя шаблон из файла /res/layout/table_row.xml
    TableRow tr = (TableRow) inflater.inflate(R.layout.table_row, null);
    //Находим ячейку для номера дня по идентификатору
    TextView tv = (TextView) tr.findViewById(R.id.col1);
    //Обязательно приводим число к строке, иначе оно будет воспринято как идентификатор ресурса
    tv.setText(Integer.toString(c0));
    //Ищем следующую ячейку и устанавливаем её значение
    tv = (TextView) tr.findViewById(R.id.col2);
    tv.setText(Integer.toString(c1));
    //...и так далее для всех значений
    tv = (TextView) tr.findViewById(R.id.col3);
    tv.setText(c2);
    tv = (TextView) tr.findViewById(R.id.col4);
    tv.setText(c3);
    tv = (TextView) tr.findViewById(R.id.col5);
    tv.setText(c4);
    tv = (TextView) tr.findViewById(R.id.col6);
    tv.setText(Integer.toString(c5));
    
    tableLayout.addView(tr); //добавляем созданную строку в таблицу
       
    
  }     
 
 @Override
    public void onClick(View v) {
       
        for (int i = 0; i < tableLayout.getChildCount(); i++){
            //думаю получил строку в зоне видимости планшета, а значит и места куда нажали
         
        //tableLayout.getLayoutMode();
        TableRow tablerow = (TableRow)tableLayout.getChildAt(i);
        
        for (int j = 0; j < tablerow.getChildCount(); j++) {
 
           TextView tv = (TextView) tablerow.getChildAt(j);
           String s = tv.getText().toString();
        }
        
        
}
        
    }
    
    // отображаем диалоговое окно для выбора даты
    public void setDate(View v) {
            new DatePickerDialog(ZakazSpisok.this, d,
            dateAndTime.get(Calendar.YEAR),
            dateAndTime.get(Calendar.MONTH),
            dateAndTime.get(Calendar.DAY_OF_MONTH))
            .show();
    }
 
    // отображаем диалоговое окно для выбора времени
    public void setTime(View v) {
            new TimePickerDialog(ZakazSpisok.this, t,
            dateAndTime.get(Calendar.HOUR_OF_DAY),
            dateAndTime.get(Calendar.MINUTE), true)
            .show();
    }
    // установка начальных даты и времени
    private void setInitialDateTime() {
 
        currentDateTime .setText(DateUtils.formatDateTime(this,
                        dateAndTime.getTimeInMillis(),
                        DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR 
                        | DateUtils.FORMAT_SHOW_TIME));
    }
 
    // установка обработчика выбора времени
    TimePickerDialog.OnTimeSetListener t=new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
            dateAndTime.set(Calendar.MINUTE, minute);
            setInitialDateTime();
        }
    };
 
    // установка обработчика выбора даты
    DatePickerDialog.OnDateSetListener d=new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            dateAndTime.set(Calendar.YEAR, year);
            dateAndTime.set(Calendar.MONTH, monthOfYear);
            dateAndTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            setInitialDateTime();
        }
    };
 
    
}
2. zakazform.xml
XML
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
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="ru.rosplk.zakaz.ZakazSpisok">
    
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">
 
 
        <EditText
            android:id="@+id/currentDateTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18dp"
            android:layout_weight="1" />
 
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Изменить время"
            android:onClick="setTime"
            android:id="@+id/timeButton"
            android:layout_weight="1" />
 
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Изменить дату"
            android:onClick="setDate"
            android:id="@+id/dateButton"
            android:layout_weight="1" />
    </LinearLayout>
    
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtCommint"
        android:layout_gravity="center_horizontal"
        android:hint="@string/commint_txt" />
        
    </LinearLayout>
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/tovar_btn"
        android:id="@+id/btnTovar"
        android:layout_gravity="center_horizontal" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/vigruzka_btn"
        android:id="@+id/btnBD" />
 
    </LinearLayout>
 
<HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/horizontalScrollView" 
        android:scrollbars="horizontal|vertical" 
        android:visibility="visible"      
        android:layout_gravity="center_horizontal" >
 
        <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="visible"            
            android:id="@+id/scrollView" >
 
            
            <TableLayout
                android:id="@+id/table"
                android:background="#ffcc00"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                
            </TableLayout>
            
        </ScrollView>
    </HorizontalScrollView>  
    
    
            
</LinearLayout>

3. table_row

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
    
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:background="#1E213D" android:layout_margin="1dip" android:id="@+id/table_row">
  <TextView android:id="@+id/col1" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
  <TextView android:id="@+id/col2" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
  <TextView android:id="@+id/col3" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
  <TextView android:id="@+id/col4" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
  <TextView android:id="@+id/col5" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
  <TextView android:id="@+id/col6" android:text="" 
  android:background="#FCFBF8" android:layout_margin="1dip"/>
</TableRow>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2016, 18:06
Ответы с готовыми решениями:

Отловить изменения в статус баре Android Java
Привет, ребята. Появилась нужда в отлове оповещений в статус баре т.е. к...

Использование Android Studio как IDE для Java
Здравствуйте коллеги! Я обучаюсь программированию на Android, Для этого скачал...

Можно ли написать веб сервер на Java для клиента на Android, имея под рукой только телефон на Android?
Уважаемые гуру программирования, если можно, пожалуйста, напишите поподробнее-...

Как отловить закрытие формы по нажатию на крестик в правом верхнем углу формы
Обычный обработчик не катит: нужно закрыть форму в процессе работы программы

Как сделать так, чтобы при обработке события onClick для поля строки значение свойства readOnly становилось бы false для всей строки?
Есть таблица, у которой каждая ячейка - поле типа &lt;input type=text&gt; (где value...

8
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,517
Завершенные тесты: 1
22.08.2016, 10:56 #2
проверить лень, но я бы вешал на каждую строку TableRow слушатель
и в самом слушателе делал что-то типа
Java
1
2
3
4
5
6
7
8
9
    @Override
    public void onClick(View v) {
        TableRow row = (TableRow) v;
        final int count = row.getChildCount();
        for (int i = 0; i < count; i++) {
            final TextView child = (TextView) row.getChildAt(i);
            String text = child.getText().toString(); // текст, что там дальше с ним делать
        }
    }
0
alegator74
2 / 2 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 11:36  [ТС] #3
попробовал повесить на строку, так сейчас почемуто слушатель вообще не отрабатывает
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TableRow tableRow = (TableRow)findViewById(R.id.table_row);
                 
                 tableRow.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        
                        
                        TableRow row = (TableRow) v;
                            final int count = row.getChildCount();
                            for (int i = 0; i < count; i++) {
                            final TextView child = (TextView) row.getChildAt(i);
                            String text = child.getText().toString(); // текст, что там дальше с ним делать
        
                        }
                        
                        
                    }
0
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,517
Завершенные тесты: 1
22.08.2016, 11:55 #4
по идее это надо делать в addRow()
например после строки tableLayout.addView(tr);
tr.setOnClickListener бла-бла
0
alegator74
2 / 2 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 12:35  [ТС] #5
сделал слушатель на строку теперь вылетает в строке TableRow row = (TableRow) v;
чтото сдесь ему не нравится
0
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,517
Завершенные тесты: 1
22.08.2016, 12:43 #6
полный лог ошибки бы увидеть
0
alegator74
2 / 2 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 12:58  [ТС] #7
Как посмотреть логи в netbeanse я пока еще не разобрался, ввел исключение оно выдало
(java.lang.ClassCastException) java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.widget.TableRow
0
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,517
Завершенные тесты: 1
22.08.2016, 13:00 #8
Цитата Сообщение от alegator74 Посмотреть сообщение
netbeanse

Цитата Сообщение от alegator74 Посмотреть сообщение
(java.lang.ClassCastException) java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.widget.TableRow
из текста понятно что слушатель вешается не на TableRow а на TableLayout
0
alegator74
2 / 2 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 13:15  [ТС] #9
Все получилось, спасибо, ранее был не внимателен не ктой таблице привязал чейчас так сделал
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        tr.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //row = null;
                //try {
                    TableRow row = (TableRow) v;
                //} catch (Exception e) {
                //   System.out.println(e);
                //}
                //if (row!=null){
                    final int count = row.getChildCount();
                    for (int i = 0; i < count; i++) {
                        final TextView child = (TextView) row.getChildAt(i);
                        String text = child.getText().toString(); // текст, что там дальше с ним делать
                    }
                //}
            }
        });
и все работает
1
22.08.2016, 13:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2016, 13:15

TableLayout добавить строки в другие столбцы
Добрый день. Есть такой код. Но TextView добавляются снизу. Как сделать чтобы...

Как в Android Studio по нажатию кнопки выводить свой текст в TextView?
Вот мой код MyActivity.java: package com.example.dasha; import...

Как бы запомнить значение ключа вставленной строки для вставки в строки поля другой таблицы?
Даны две таблицы в MS access 2010. Полей больше, чем я напишу, но они здесь...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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