Страница 3 из 16
Re: Урок 42. Список - ListView
Добавлено: 11 сен 2012, 13:34
sotnik
rezak90 писал(а):так в чём проблема? то же самое что я описал сообщеним выше только результат не возвращаем в предыдущее активити, а создаём новое активити со списком который добавили в избранное. Опишу подробней сразу:
существует список ArrayList<String> primaryList; в котором содержатся данные из основного ListView, далее переходим в следующиее активти WebView и добавляем ссылки в "избранное" в новый список ArrayList<String> bookmark; и потом отображаем их в новом активти в списке ListView.
Спасибо!
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 10:15
sotnik
rezak90 писал(а):так в чём проблема? то же самое что я описал сообщеним выше только результат не возвращаем в предыдущее активити, а создаём новое активити со списком который добавили в избранное. Опишу подробней сразу:
существует список ArrayList<String> primaryList; в котором содержатся данные из основного ListView, далее переходим в следующиее активти WebView и добавляем ссылки в "избранное" в новый список ArrayList<String> bookmark; и потом отображаем их в новом активти в списке ListView.
Что то я совсем запутался, не пойму что писать в onClick.
Код: Выделить всё
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
public class ActivityTwo extends Activity implements OnClickListener {
Button btnAdd;
final String LOG_TAG = "myLogs";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two);
//находим кнопку
btnAdd = (Button) findViewById (R.id.btnAdd);
btnAdd.setOnClickListener(this);
Bundle bundle = getIntent().getExtras();
String itemname = "n" + bundle.getString("defStrID"); //получаем строку и формируем имя ресурса
Context context = getBaseContext(); //получаем контекст
//читаем текстовый файл из ресурсов по имени
String text = readRawTextFile(context, getResources().getIdentifier(itemname, "raw", "ru.sotnik.sample"));
WebView myWebView = (WebView) findViewById(R.id.webView);
String summary = "<html><body>" + text + "</body></html>";
myWebView.loadDataWithBaseURL("x-data://base",summary, "text/html", "utf-8", null); //загружаем текст в webview
}
public static String readRawTextFile(Context ctx, int resId) //читаем текст из raw
{
InputStream inputStream = ctx.getResources().openRawResource(resId);
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder text = new StringBuilder();
try {
while (( line = buffreader.readLine()) != null) {
text.append(line);
text.append('\n');
}
} catch (IOException e) {
return null;
}
return text.toString();
}
public void onClick(View v){
}
}
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 10:24
rezak90
А вот теперь я вас не понял. Где же список? где добавление ссылки в избранное?
В этом куске кода только загрузка данных в WebView.
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 10:56
sotnik
rezak90 писал(а):А вот теперь я вас не понял. Где же список? где добавление ссылки в избранное?
В этом куске кода только загрузка данных в WebView.
В первом активити список вот так создал?
Код: Выделить всё
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class secondActivity extends Activity {
ListView lvMain;
String[] names;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// находим сисок
lvMain = (ListView) findViewById(R.id.lvMain);
// создаем адаптер
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.names,
android.R.layout.simple_list_item_1);
// присваиваем адаптер списку
lvMain.setAdapter(adapter);
// получаем массив из файла ресурсов
names = getResources().getStringArray(R.array.names);
// обработчик нажатий
lvMain.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
//Позиция элемента, по которому щелкнули
String itemname = new Integer(position).toString();
Intent intent = new Intent();
intent.setClass(secondActivity.this, ActivityTwo.class);
Bundle b = new Bundle();
//defStrID содержит строку, которую отправим через itemname в другое Activity
b.putString("defStrID", itemname);
intent.putExtras(b);
//запускаем Intent
startActivity(intent);
}
});
//обработчик прокрутки
lvMain.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState){
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount){
}
});
}
}
Я не пойму как мне из ActivitiTwo получить ссылку на нужный пункт списка.
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 11:19
rezak90
насколько я понял вы не можете получить ссылку на которую нажали с webview?
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 12:30
sotnik
rezak90 писал(а):насколько я понял вы не можете получить ссылку на которую нажали с webview?
Я пробовал делать так: по нажатию на кнопку btnAdd возвращался порядковый номер пункта в списке
public void onClick(View v){
Bundle b = getIntent().getExtras();
b.getString("defStrID");
}
А дальше как туплю.
Это мое первое приложение решил сделать для закрепления первых 50 пройденных уроков, но наверное надо читать дальше.
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 12:39
rezak90
"моя-твоя не понимать"
вы по клику на списке поулчаете айди ячейки в списке, далее передаёте её в следующее активити, что это даёт? и что с этим айди должно дальше происходить?
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 13:07
sotnik
rezak90 писал(а):"моя-твоя не понимать"
вы по клику на списке поулчаете айди ячейки в списке, далее передаёте её в следующее активити, что это даёт? и что с этим айди должно дальше происходить?
по клику в основном списке открывается webView далее
String itemname = "n" + bundle.getString("defStrID"); //получаем строку и формируем имя ресурса
открывается текстовый файл в webView (в ресурсах я их сохранил с именами n0.txt, n1.txt и т.д.)
теперь по нажатию кнопки btnAdd ссылка на этот текстовый файл должна сохранится в новом списке "избранное" а как это сделать я так и не пойму.
Re: Урок 42. Список - ListView
Добавлено: 14 сен 2012, 13:15
rezak90
у вас обработчике public void onItemClick(AdapterView<?> parent, View view, int position, long id) id - это запись в адаптере, в данном случае из R.array.names , в него внесли изменения в другой активити, и по возврату в основной активити следует обновить адаптер notifyDatasetChanger().
Имхо: для таких вещей следует юзать simplecursoradapter. Но думаю вы до него не дошли, а выше описанная мною схема вполне подойдёт для начала.
Re: Урок 42. Список - ListView
Добавлено: 27 окт 2012, 19:08
Quver
Не могу открыть android.jar/res.layout/simple_list_item_1.xml
"Android XML Editor cannot process this input."
Re: Урок 42. Список - ListView
Добавлено: 27 окт 2012, 19:25
AndreyI
Это происходит потому что в пакете jar все ресурсы xml представлены не в текстовом виде, а в двоичном, который не понимает стандартный XML Editor.
Исходник в текстовом виде можно посмотреть в <android-sdk>/platforms/android-?/data/res/layout/simple_list_item_1.xml (где <android-sdk> - папка, где у вас находится SDK Android, вместо вопроса номер платформы).
Re: Урок 42. Список - ListView
Добавлено: 27 окт 2012, 19:46
Quver
Спасибо!
Re: Урок 42. Список - ListView
Добавлено: 07 ноя 2012, 12:53
vortex
Почему он мне пишет такое?
// создаем адаптер
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.my_list_item, names);
Ошибка: my_list_item cannot be resolved or is not a field
Файл в res\layout my_list_item.xml есть.
В R.java создалось:
public static final class layout {
public static final int main=0x7f030000;
public static final int my_list_item=0x7f030001;
Помогите плиз
Re: Урок 42. Список - ListView
Добавлено: 07 ноя 2012, 14:04
AndreyI
android.R - это ресурсы системы, естественно что там нет вашего my_list_item
Ваши ресурсы это R.layout.my_list_item
ЗЫ и проследите, чтобы android.R не прописалось в импорте, если пропишется - удалите этот импорт, иначе R.layout.my_list_item также будет искать в системных ресурсах.
Re: Урок 42. Список - ListView
Добавлено: 07 ноя 2012, 15:01
vortex
Вот она, невнимательность
Спасибо.
Re: Урок 42. Список - ListView
Добавлено: 15 ноя 2012, 07:41
palachsuper
Есть вопрос, нужно чтоб список появлялся по нажатию кнопки. ArrayAdapter<...> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, ...) работает в событии создания формы (onCreate), а если это добро прописать в своем классе и внутри своей функции, но она злостно ругается:( говорит The constructor ArrayAdapter<String>(Connect.MyTask, int, String) is undefined. Перепробовал различные реализации контекста, пока результата нет((( заранее спасибо за помощь
Re: Урок 42. Список - ListView
Добавлено: 15 ноя 2012, 08:30
palachsuper
Разобрался сам путем проб и ошибок, если кому надо могу рассказать
Re: Урок 42. Список - ListView
Добавлено: 16 ноя 2012, 10:30
damager82
palachsuper писал(а):Разобрался сам путем проб и ошибок, если кому надо могу рассказать
Конечно напишите, пригодится на будущее
Re: Урок 42. Список - ListView
Добавлено: 16 ноя 2012, 13:54
palachsuper
Проблема состояла в том, что список выводился вообще в отдельном потоке AsynkTaska'а, при этом поток вызывал функцию, содержащую вывод списка доступных WiFi-сетей после сканирования.
Решена была слишком уж тривиально: ArrayAdapter<MSR> adapter = new ArrayAdapter<MSR>(Connect.this, android.R.layout.simple_list_item_1, resultMSR);
где Connect - имя класса активити - вполне просто и понятно, а я че только не перепробовал, и this и class.activity и все что только можно
MSR - наследник класса ScanResult,
resultMSR - результат сканирования сети.
Наследника класса пришлось делать по причине наличия избыточной информации о сети именно для вывода в список. А так чуть подредактировал функцию вывода toString() и все, получил SSID сети в массив.
Re: Урок 42. Список - ListView
Добавлено: 16 ноя 2012, 14:05
AndreyI
Все верно, this это ссылка на объект экземпляра класса, но если этот класс является внутренним классом (в т.ч. и анонимным) то для доступа к объекту внешнего класса нужно явно это указать, иначе компилятор будет считать, что this это ссылка на объект внутреннего класса.