Интерфейс, диалоги, темы, стили, меню
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 19 авг 2012, 22:58
В гланой активити есть три TableLayout c TableRow01 .... TableRow57
При клику по TableRowXX
Код: Выделить всё
TableRow01.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intt = new Intent(html_view, html_view.class);
startActivity(intt);
}
});
должен открываться html файл file01 в WebView01 в активити html_view.
Код: Выделить всё
public class html_view extends Activity {
private WebView html_view;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.html_view);
html_view = (WebView) findViewById(R.id.WebView01);
html_view.loadUrl("file:///android_asset/file01.html");
}
}
Все работает, но ни как не могу сообразить как закодить обработку вызова файлов так чтобы не писать 57 раз одно и тоже.
Создал массив строк с названиями файлов file
для loadUrl, а как сформироваит вызов TableRow.setOnClickListener(new View.OnClickListener() для i 1...57 сообразить не могу, туплю с алгоритмом.
Подскажите, пожалуйста, как сделать, а лучше пример кода.
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 20 авг 2012, 09:46
Эм.... А не проще использовать ListView?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 20 авг 2012, 23:00
Может и проще для вызова по клику на элемент списка. Но т.к. у меня на экран должна выводиться таблица со стройными столбцами, то сделать это с помощью списка с возможностью выравнивания текста в столбцах таблицы при разных разрешениях экрана - сложно. У меня не выходит.
Поэтому я решил использовать Tableview.
Просьба помочь в решени моей задачи с выбором по клику на строку таблицы.
-
math64
- Сообщения: 235
- Зарегистрирован: 16 июл 2012, 07:47
Сообщение
math64 » 22 авг 2012, 13:57
1. Если использовать ListView - в разметке ячейки ширину столбцов указывать 0 и каждому столбцу давать вес в соответствии, какую долю ширины ячейки Вы хотите ему отдать.
2. При использовании TableLayout.
В каждом TableRow прописать в тег url открываемого файла.
В методе onClick он прописывается в bundle.
В методе onCreate новой активити он извлекается из bundle и передаётся в html_view.
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 22 авг 2012, 18:40
math64
Спасибо за ответ. Думаю мне больше подойдет 2-й вариант с TableLayout (TableRow)
Но т.к. кодить на java я только учусь, можно немного по-подробнее:
я так понял, что в тег каждого TableRow я должен прописать URL что-то типа file:///android_asset/filexx.html или @string/filexx. Но вот как прописать вызов по клику на TableRow?
Если не сложно, помогите с кодом для onClick и onCreate чтобы передать URL в html_view.
Буду очень признателен за пример с пояснением сути.
-
math64
- Сообщения: 235
- Зарегистрирован: 16 июл 2012, 07:47
Сообщение
math64 » 23 авг 2012, 08:05
URL указываете в разметке - если Вам это подгодит. Но можно сделать это и в коде.
Код: Выделить всё
TableRow[] rows = new TableRow[] { (TableRow)findViewById(R.id.row1), (TableRow)findViewById(R.id.row2), ... };
String[] urls = new String[] { "file:///android_asset/file01.html", "file:///android_asset/file02.html", ... };
View.OnClickListener onRowClick = new View.OnClickListener() {
public void onClick(View v) {
Object tag = v.getTag();
Bundle b = new Bundle();
b.putString("url", tag.toString());
Intent intt = new Intent(this, html_view.class);
startActivity(intt, bundle);
}
};
for(int i = 0; i < rows.length; i++) {
TableRow row = rows[i];
row.setOnClikListener(onRowClick);
row.setTag(urls[i]);
}
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 23 авг 2012, 17:16
math64
Не выходит (:
В главной (вызывающей) активити с таблицей (файл classes.java) так:
Код: Выделить всё
package com.samples.tables;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TableRow;
public class classes extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.classes);
TableRow[] rows = new TableRow[] {
(TableRow) findViewById(R.id.TableRow1),
(TableRow) findViewById(R.id.TableRow2),
...... };
String[] urls = new String[] { "file:///android_asset/f01.html",
"file:///android_asset/f02.html",
........ };
View.OnClickListener onRowClick = new View.OnClickListener() {
public void onClick(View v) {
Object tag = v.getTag();
Bundle b = new Bundle();
b.putString("url", tag.toString());
Intent intt = new Intent(this, html_view.class);
startActivity(intt, bundle);
}
};
for(int i = 0; i < rows.length; i++) {
TableRow row = rows[i];
row.setOnClickListener(onRowClick);
row.setTag(urls[i]);
}
}
}
Ругается на
Код: Выделить всё
Intent intt = new Intent(this, html_view.class);
The constructor Intent(new View.OnClickListener(){}, Class<html_view>) is undefined
bundle cannot be resolved to a variable
Хотя Class<html_view> создан (есть файл html_view.java), bundle b тоже есть. Где не так?
И еще, что должно быть в файле html_view.java c webview01, чтобы туда подставился нужный URL из массива urls?
-
rezak90
- Сообщения: 3422
- Зарегистрирован: 26 июн 2012, 13:22
- Откуда: UA
-
Контактная информация:
Сообщение
rezak90 » 23 авг 2012, 17:34
Может так:
Intent intt = new Intent(classes.this, html_view.class);
З.Ы. имена классов пишутся с большой буквы!
R.id.team
Политика на форуме запрещена
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 23 авг 2012, 18:10
rezak90 писал(а):Может так:
Intent intt = new Intent(classes.this, html_view.class);
Помогло, ошибки нет.
Во втором случае помогло так:
в файл html_view.java прописал так:
Код: Выделить всё
Bundle b = getIntent().getExtras();
String value = b.getString("url");
html_view = (WebView) findViewById(R.id.WebView01);
html_view.loadUrl(value);
Работает

-
math64
- Сообщения: 235
- Зарегистрирован: 16 июл 2012, 07:47
Сообщение
math64 » 24 авг 2012, 07:44
Писал прямо на экране - не пробовал компилировать, оттуда и ошибки. Что вместо bundle нужно писать b можно бы и так догадаться.
В вот первую ошибку исправить новичку без подсказки трудно - тем более, что компилятор ерунду в сообщении об ошибках пишет.
У вложенных и анонимных классов есть несколько указателей this, и необходимо уточнять, какой имеется ввиду.
Вместо анонимного класса слушателя можно в активити реализовать интерфейс слушателя, но часто нужно иметь разные слушатели на разные виджеты. А можно вынести слушатель в отдельный файл.
Кстати, можно обойтись без bundle, просто putExtra и getStringExtra() (урок 28)