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

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

Войти
Регистрация
Восстановить пароль
 
alegator74
1 / 1 / 0
Регистрация: 21.08.2016
Сообщений: 17
#1

TableLayout как отловить значение строки по нажатию (для Андроид на java) - Программирование Android

21.08.2016, 18:06. Просмотров 411. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2016, 18:06     TableLayout как отловить значение строки по нажатию (для Андроид на java)
Посмотрите здесь:

Приложения для андроид пишутся на Java? - Программирование Android
Всем привет меня интересует на каком языке пишуться приложения на андройд?

Необходимые разделы JAVA для Андроид-разработчика - Программирование Android
Привет всем обывателям форума! Решил под новый год себе сделать подарок, - купил литературу по Андроид: 1. &quot;Android для...

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

Как правильно сделать событие в таймере Java под андроид - Программирование Android
Проблема причем срочная,пишу диплом тема:программный таймер управления телевизором. Выбрал ось Андроид пытаюсь написать адекватный таймер...

Как увеличить скорость бегущей строки андроид? - Программирование Android
Добрый день! Реализована бегущая строка &lt;TextView android:id=&quot;@+id/tvInstructionSetTime&quot; ...

Как в ячейке TableLayout совместить два изображения? - Программирование Android
Собственно задача следующая: внизу активности текст. над текстом изображение собранное из нескольких слоев. в зависимости от количества...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2414 / 1859 / 583
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
22.08.2016, 10:56     TableLayout как отловить значение строки по нажатию (для Андроид на java) #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(); // текст, что там дальше с ним делать
        }
    }
alegator74
1 / 1 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 11:36  [ТС]     TableLayout как отловить значение строки по нажатию (для Андроид на java) #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(); // текст, что там дальше с ним делать
        
                        }
                        
                        
                    }
Pablito
2414 / 1859 / 583
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
22.08.2016, 11:55     TableLayout как отловить значение строки по нажатию (для Андроид на java) #4
по идее это надо делать в addRow()
например после строки tableLayout.addView(tr);
tr.setOnClickListener бла-бла
alegator74
1 / 1 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 12:35  [ТС]     TableLayout как отловить значение строки по нажатию (для Андроид на java) #5
сделал слушатель на строку теперь вылетает в строке TableRow row = (TableRow) v;
чтото сдесь ему не нравится
Pablito
2414 / 1859 / 583
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
22.08.2016, 12:43     TableLayout как отловить значение строки по нажатию (для Андроид на java) #6
полный лог ошибки бы увидеть
alegator74
1 / 1 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 12:58  [ТС]     TableLayout как отловить значение строки по нажатию (для Андроид на java) #7
Как посмотреть логи в netbeanse я пока еще не разобрался, ввел исключение оно выдало
(java.lang.ClassCastException) java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.widget.TableRow
Pablito
2414 / 1859 / 583
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
22.08.2016, 13:00     TableLayout как отловить значение строки по нажатию (для Андроид на java) #8
Цитата Сообщение от alegator74 Посмотреть сообщение
netbeanse

Цитата Сообщение от alegator74 Посмотреть сообщение
(java.lang.ClassCastException) java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.widget.TableRow
из текста понятно что слушатель вешается не на TableRow а на TableLayout
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2016, 13:15     TableLayout как отловить значение строки по нажатию (для Андроид на java)
Еще ссылки по теме:

Chronometer в андроид java - Программирование Android
package com.example.stopwatch; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import...

Как создать квадратный TableLayout содержащий 100 ImageView? - Программирование Android
Здравствуйте уважаемые Специалисты! Уже 2 недели ищу в интернете информацию и ничего нет. У меня такой вопрос: есть 100...

Генерация R.java в андроид приложениях - Программирование Android
Нужна помощь чайнику, решился научиться писать приложения для андроида. Для обкатки попытался скомпилировать проект готовой простенькой...

Навыки java под андроид - Программирование Android
Доброго дня! Изучаю java, хочу разрабатывать приложения для андроид, встал вопрос, какие разделы этого языка нужны в первую очередь ...

Как начать программирование для Андроид? - Программирование Android
Какой так сказать порог вхождения в эту сферу? Очень высокий? Изучил я Java например, и все? Можно начинать? Хочу делать мобильные...


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

Или воспользуйтесь поиском по форуму:
alegator74
1 / 1 / 0
Регистрация: 21.08.2016
Сообщений: 17
22.08.2016, 13:15  [ТС]     TableLayout как отловить значение строки по нажатию (для Андроид на java) #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(); // текст, что там дальше с ним делать
                    }
                //}
            }
        });
и все работает
Yandex
Объявления
22.08.2016, 13:15     TableLayout как отловить значение строки по нажатию (для Андроид на java)
Ответ Создать тему
Опции темы

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