Урок 42. Список - ListView

Обсуждение уроков
sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 42. Список - ListView

Сообщение sotnik » 11 сен 2012, 13:34

rezak90 писал(а):так в чём проблема? то же самое что я описал сообщеним выше только результат не возвращаем в предыдущее активити, а создаём новое активити со списком который добавили в избранное. Опишу подробней сразу:
существует список ArrayList<String> primaryList; в котором содержатся данные из основного ListView, далее переходим в следующиее активти WebView и добавляем ссылки в "избранное" в новый список ArrayList<String> bookmark; и потом отображаем их в новом активти в списке ListView.
Спасибо!

sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 42. Список - ListView

Сообщение sotnik » 14 сен 2012, 10:15

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){	
     
		
    }
}

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение rezak90 » 14 сен 2012, 10:24

А вот теперь я вас не понял. Где же список? где добавление ссылки в избранное?
В этом куске кода только загрузка данных в WebView.
R.id.team
Политика на форуме запрещена

sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 42. Список - ListView

Сообщение sotnik » 14 сен 2012, 10:56

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 получить ссылку на нужный пункт списка.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение rezak90 » 14 сен 2012, 11:19

насколько я понял вы не можете получить ссылку на которую нажали с webview?
R.id.team
Политика на форуме запрещена

sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 42. Список - ListView

Сообщение sotnik » 14 сен 2012, 12:30

rezak90 писал(а):насколько я понял вы не можете получить ссылку на которую нажали с webview?
Я пробовал делать так: по нажатию на кнопку btnAdd возвращался порядковый номер пункта в списке

public void onClick(View v){

Bundle b = getIntent().getExtras();
b.getString("defStrID");
}

А дальше как туплю.
Это мое первое приложение решил сделать для закрепления первых 50 пройденных уроков, но наверное надо читать дальше.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение rezak90 » 14 сен 2012, 12:39

"моя-твоя не понимать" :?
вы по клику на списке поулчаете айди ячейки в списке, далее передаёте её в следующее активити, что это даёт? и что с этим айди должно дальше происходить?
R.id.team
Политика на форуме запрещена

sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 42. Список - ListView

Сообщение sotnik » 14 сен 2012, 13:07

rezak90 писал(а):"моя-твоя не понимать" :?
вы по клику на списке поулчаете айди ячейки в списке, далее передаёте её в следующее активити, что это даёт? и что с этим айди должно дальше происходить?
по клику в основном списке открывается webView далее
String itemname = "n" + bundle.getString("defStrID"); //получаем строку и формируем имя ресурса
открывается текстовый файл в webView (в ресурсах я их сохранил с именами n0.txt, n1.txt и т.д.)

теперь по нажатию кнопки btnAdd ссылка на этот текстовый файл должна сохранится в новом списке "избранное" а как это сделать я так и не пойму. :?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение rezak90 » 14 сен 2012, 13:15

у вас обработчике public void onItemClick(AdapterView<?> parent, View view, int position, long id) id - это запись в адаптере, в данном случае из R.array.names , в него внесли изменения в другой активити, и по возврату в основной активити следует обновить адаптер notifyDatasetChanger().
Имхо: для таких вещей следует юзать simplecursoradapter. Но думаю вы до него не дошли, а выше описанная мною схема вполне подойдёт для начала.
R.id.team
Политика на форуме запрещена

Quver
Сообщения: 9
Зарегистрирован: 18 сен 2012, 00:37

Re: Урок 42. Список - ListView

Сообщение Quver » 27 окт 2012, 19:08

Не могу открыть android.jar/res.layout/simple_list_item_1.xml

"Android XML Editor cannot process this input."

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 42. Список - ListView

Сообщение AndreyI » 27 окт 2012, 19:25

Это происходит потому что в пакете jar все ресурсы xml представлены не в текстовом виде, а в двоичном, который не понимает стандартный XML Editor.
Исходник в текстовом виде можно посмотреть в <android-sdk>/platforms/android-?/data/res/layout/simple_list_item_1.xml (где <android-sdk> - папка, где у вас находится SDK Android, вместо вопроса номер платформы).

Quver
Сообщения: 9
Зарегистрирован: 18 сен 2012, 00:37

Re: Урок 42. Список - ListView

Сообщение Quver » 27 окт 2012, 19:46

Спасибо!

vortex
Сообщения: 43
Зарегистрирован: 15 окт 2012, 11:07

Re: Урок 42. Список - ListView

Сообщение vortex » 07 ноя 2012, 12:53

Почему он мне пишет такое?

// создаем адаптер
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;

Помогите плиз

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 42. Список - ListView

Сообщение AndreyI » 07 ноя 2012, 14:04

android.R - это ресурсы системы, естественно что там нет вашего my_list_item

Ваши ресурсы это R.layout.my_list_item

ЗЫ и проследите, чтобы android.R не прописалось в импорте, если пропишется - удалите этот импорт, иначе R.layout.my_list_item также будет искать в системных ресурсах.

vortex
Сообщения: 43
Зарегистрирован: 15 окт 2012, 11:07

Re: Урок 42. Список - ListView

Сообщение vortex » 07 ноя 2012, 15:01

Вот она, невнимательность :)
Спасибо.

palachsuper
Сообщения: 5
Зарегистрирован: 15 ноя 2012, 07:33

Re: Урок 42. Список - ListView

Сообщение palachsuper » 15 ноя 2012, 07:41

Есть вопрос, нужно чтоб список появлялся по нажатию кнопки. ArrayAdapter<...> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, ...) работает в событии создания формы (onCreate), а если это добро прописать в своем классе и внутри своей функции, но она злостно ругается:( говорит The constructor ArrayAdapter<String>(Connect.MyTask, int, String) is undefined. Перепробовал различные реализации контекста, пока результата нет((( заранее спасибо за помощь

palachsuper
Сообщения: 5
Зарегистрирован: 15 ноя 2012, 07:33

Re: Урок 42. Список - ListView

Сообщение palachsuper » 15 ноя 2012, 08:30

Разобрался сам путем проб и ошибок, если кому надо могу рассказать

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение damager82 » 16 ноя 2012, 10:30

palachsuper писал(а):Разобрался сам путем проб и ошибок, если кому надо могу рассказать
Конечно напишите, пригодится на будущее
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

palachsuper
Сообщения: 5
Зарегистрирован: 15 ноя 2012, 07:33

Re: Урок 42. Список - ListView

Сообщение palachsuper » 16 ноя 2012, 13:54

Проблема состояла в том, что список выводился вообще в отдельном потоке 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 сети в массив.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 42. Список - ListView

Сообщение AndreyI » 16 ноя 2012, 14:05

Все верно, this это ссылка на объект экземпляра класса, но если этот класс является внутренним классом (в т.ч. и анонимным) то для доступа к объекту внешнего класса нужно явно это указать, иначе компилятор будет считать, что this это ссылка на объект внутреннего класса.

Ответить