Урок 44. События в ListView

Обсуждение уроков
evgens
Сообщения: 4
Зарегистрирован: 19 сен 2013, 19:07

Re: Урок 44. События в ListView

Сообщение evgens » 18 ноя 2013, 20:16

Подскажите очень простую, на мой взгляд, вещь:

Есть layout элемента ListView

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ImageView
        android:id="@+id/ImageItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>
С помощью своего адаптера заполняю с список картинками из drawable посредством массива:
Integer[] images = {R.drawable.img1, R.drawable.img2}

Как при нажатии на элемент списка, получить именно ту картинку, на которую я нажал, и сохранить её в битмап?

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 44. События в ListView

Сообщение Nialon » 01 дек 2013, 21:33

evgens, уже решили?

Большая разница, вы просите обработку клика внутри элементов итема ListView.
Все зависит от того каким адаптером вы пользуетесь. Если заполняете элементы вручную через цикл,
то суть такая: Внутри цикла найти ImageView, повесить обработку клика.
Хотите подробностей, скиньте код вашего адаптера, которым вы заполняете список.

Есть вариант изначально повесить обработку клика до цикла ..
Или через свойство у ImageView - OnClick. Не пробовал.

evgens
Сообщения: 4
Зарегистрирован: 19 сен 2013, 19:07

Re: Урок 44. События в ListView

Сообщение evgens » 02 дек 2013, 20:04

Nialon, решил не заморачиваться и сделать так:

Код: Выделить всё

OnItemClickListener c = new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			// TODO Auto-generated method stub

			Bitmap bm=BitmapFactory.decodeResource(getResources(), images[position]);
			
		}
		
	};

Аватара пользователя
Nialon
Сообщения: 22
Зарегистрирован: 12 ноя 2013, 19:19

Re: Урок 44. События в ListView

Сообщение Nialon » 02 дек 2013, 20:11

Ну, правильно сделали, поиск рулит. =)

Alex14
Сообщения: 4
Зарегистрирован: 03 дек 2013, 17:08

Re: Урок 44. События в ListView

Сообщение Alex14 » 09 дек 2013, 17:40

Добрый день

Как и большинство новичок.
Знания в Java небольшие, Андроид только начинаю изучать.
Хочу написать,в качестве практики Справочник.
Есть главный ListView по нажатии его любого эл-та должен перейти на новый ListView, по нажатии элемента этого LV должно открыватсься окно со статьей.
Начал писать
public class Main extends ListActivity {


String menu[] = {"Цифры","Буквы","Слова"};
String intMenu[] = {"1","2","3","4"};


ArrayAdapter<String> menuAdapter;ArrayAdapter<String> intMenuAdapter;
String strMenu;String strIntMenu;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);


menuAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menu) ;
basicMenuAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,intMenu) ;
setListAdapter(menuAdapter);

protected void onListItemClick(ListView l, View v, int position, long id) {

}
}
}
Как мне сделать обработку нажатий на элемент списка в switch-case?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 44. События в ListView

Сообщение Foenix » 09 дек 2013, 18:01

все есть в уроках
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Alex14
Сообщения: 4
Зарегистрирован: 03 дек 2013, 17:08

Re: Урок 44. События в ListView

Сообщение Alex14 » 09 дек 2013, 19:33

Foenix писал(а):все есть в уроках

Аватара пользователя
MASK
Сообщения: 4
Зарегистрирован: 09 янв 2014, 09:15

Re: Урок 44. События в ListView

Сообщение MASK » 16 фев 2014, 22:27

Serge писал(а):После этого урока возник вопрос по эмулятору.
ItemSelect у меня вызывается только при нажатии пробела, при этом позиционируется на строке, где был последний клик. Ни кнопки курсора, ни колесо мыши не работает.
Спасибо большое за это сообщение, а то я уже не знала как заставить работать этот OnItemSelectedListener. На эмуляторе теперь работает, а вот как его активировать на реальном девайсе - ума не приложу, там-то нет клавиатуры с пробелом :roll:
Если кто-то разобрался - прошу помощи, хотя подозреваю, что этот метод на самом деле оставлен в коде рудиментарно и в жизни не используется.
Буду рада любым ответам!

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 30 мар 2014, 17:02

помогите пожалуйста в решением задачи: есть два списка разделы и подразделы. Нужно реализовать переход от одного к другому в зависимости от пункта раздела - в свои подразделы. облазил кучу форумов, проблема в том, как определить какой пункт списка нажат (его реальное название).
код MainActivity:

Код: Выделить всё

package com.vadim.perepelyak.polskaprosto_1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;

import android.widget.ListView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		String[] sections = getResources().getStringArray(R.array.main_list);

		ListView lvMain = (ListView) findViewById(R.id.lvMain);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main_list_item, sections);
		lvMain.setAdapter(adapter);

		//что  писать дальше я не знаю
		lvMain.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {

			}
		});

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}
Список пунктов

Код: Выделить всё

<string-array name="main_list">
        <item>Грамматика</item>
        <item>Ежедневные фразы</item>
        <item>Еда/напитки</item>
        <item>Дорога</item>
        <item>Учеба</item>
        <item>Одежда</item>
        <item>Дом</item>
        <item>Отдых</item>
        <item>Путешествия</item>
        <item>Спорт</item>
        <item>Культура Польши</item>
        <item>Здоровье</item>
    </string-array>

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Урок 44. События в ListView

Сообщение siberprogs » 30 мар 2014, 17:25

vapsel писал(а):помогите пожалуйста в решением задачи: есть два списка разделы и подразделы. Нужно реализовать переход от одного к другому в зависимости от пункта раздела - в свои подразделы. облазил кучу форумов, проблема в том, как определить какой пункт списка нажат (его реальное название).
Для этой задачи возможно подошел бы ExpandableListView.
Про него есть два урока:
http://startandroid.ru/ru/uroki/vse-uro ... tview.html
http://startandroid.ru/ru/uroki/vse-uro ... tview.html

Еще хороший урок про события в ListView:
http://startandroid.ru/ru/uroki/vse-uro ... tview.html
Linux Fedora RFRemix + Intellij Idea

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 44. События в ListView

Сообщение Foenix » 30 мар 2014, 18:45

определить какой пункт нажат можно с помощью переменной position
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 01 апр 2014, 19:38

Foenix писал(а):определить какой пункт нажат можно с помощью переменной position
подскажите, пожалуйста, как это сделать (задать такое условие) или где можно прочитать про это. Я так понял, что при прокрутки position может меняться и тогда получить не то, что нужно

пересмотрел всю группу уроков про списки, но так и не нашел нужного кода, а в деревоподном списке все равно нужно будет делать такой переход из подгруппы

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 44. События в ListView

Сообщение Foenix » 01 апр 2014, 21:49

попробуйте такой код вставить

Код: Выделить всё

lv.setOnItemClickListener(new OnItemClickListener() {
 
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {
                    // TODO Auto-generated method stub
                     int itemPosition     = position;
 
                       // ListView Clicked item value
                       String  itemValue    = (String) lv.getItemAtPosition(position);
 
                        // Show Alert 
                        Toast.makeText(getApplicationContext(),
                          "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
                          .show();
                }
надеюсь, разберетесь - там айтемы в тостик выводятся.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 44. События в ListView

Сообщение Foenix » 01 апр 2014, 21:50

http://myandroidtipsandtricks.blogspot. ... -item.html
вот еще ссылки. По-английски это selected item. Разберетесь.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 02 апр 2014, 20:45

Foenix писал(а):http://myandroidtipsandtricks.blogspot. ... -item.html
вот еще ссылки. По-английски это selected item. Разберетесь.
спасибо, на выходных постараюсь разобраться

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 05 апр 2014, 17:36

vapsel писал(а):
Foenix писал(а):http://myandroidtipsandtricks.blogspot. ... -item.html
вот еще ссылки. По-английски это selected item. Разберетесь.
спасибо, на выходных постараюсь разобраться


вот так решил свою задачу. То есть обработчик пока только для 11 элемента списка) может кому пригодиться

Код: Выделить всё

lvMain.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1,
					int position, long arg3) {
				// TODO Auto-generated method stub
				int itemPosition = position;
				
				// всплывающие сообщение (можно удалить)
				String itemValue = (String) lvMain.getItemAtPosition(position);
				Toast.makeText(getApplicationContext(),"Position :" + itemPosition + "  ListItem : "+ itemValue, Toast.LENGTH_LONG).show();
				
				switch (position) {
				case 11:
					Intent newActivity11 = new Intent(MainActivity.this, Health.class);
					startActivity(newActivity11);
					break;

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 08 апр 2014, 14:54

появилась новая проблема. снова надеюсь на вашу помощь ;)
при нажатии на элемент списка AVD закрываеться и дает такую ошибку:

Код: Выделить всё

04-05 20:25:43.298: D/AndroidRuntime(549): Shutting down VM
04-05 20:25:43.298: W/dalvikvm(549): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
04-05 20:25:43.328: E/AndroidRuntime(549): FATAL EXCEPTION: main
04-05 20:25:43.328: E/AndroidRuntime(549): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vadim.perepelyak.polskaprosto_1/com.vadim.perepelyak.polskaprosto_1.Health_words}: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.os.Handler.dispatchMessage(Handler.java:99)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.os.Looper.loop(Looper.java:137)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread.main(ActivityThread.java:4340)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at java.lang.reflect.Method.invokeNative(Native Method)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at java.lang.reflect.Method.invoke(Method.java:511)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at dalvik.system.NativeStart.main(Native Method)
04-05 20:25:43.328: E/AndroidRuntime(549): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6
04-05 20:25:43.328: E/AndroidRuntime(549): 	at com.vadim.perepelyak.polskaprosto_1.Health_words.onCreate(Health_words.java:26)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.Activity.performCreate(Activity.java:4465)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-05 20:25:43.328: E/AndroidRuntime(549): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-05 20:25:43.328: E/AndroidRuntime(549): 	... 11 more
Код активити на всякий случай:

Код: Выделить всё

public class Health_words extends Activity {

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.health_words);
		
		ListView lvWords = (ListView) findViewById(R.id.listView1);

		String[] words_poland = getResources().getStringArray(R.array.health_words_poland);
		String[] words_ukraine = getResources().getStringArray(R.array.health_words_ukraine);
						
		ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(words_poland.length);
		HashMap<String, Object> map;
		for (int i = 0; i < words_poland.length; i++) {
			map = new HashMap<String, Object>();
			map.put("Words_poland", words_poland[i]);
			map.put("Words_ukraine", words_ukraine[i]);
				}
		
		String[] from = { "Words_poland", "Words_ukraine"};
		int[] to = { R.id.tvWordPoland, R.id.tvWordUkraine };

		SimpleAdapter adapter = new SimpleAdapter(Health_words.this, data, R.layout.list_words,	from, to);
		lvWords.setAdapter(adapter);
		
	}
	}

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Урок 44. События в ListView

Сообщение siberprogs » 08 апр 2014, 16:35

[quote="vapsel"]
Код активити на всякий случай:
[syntax=java]
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(words_poland.length);
//Попробуй без (words_poland.length), оно в цикле есть.
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
[/syntax]
В логе указана ошибка:

Код: Выделить всё

04-05 20:25:43.328: E/AndroidRuntime(549): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6 
04-05 20:25:43.328: E/AndroidRuntime(549):     at 
com.vadim.perepelyak.polskaprosto_1.Health_words.onCreate(Health_words.java:26)
Linux Fedora RFRemix + Intellij Idea

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Урок 44. События в ListView

Сообщение vapsel » 08 апр 2014, 22:48

siberprogs писал(а): //Попробуй без (words_poland.length), оно в цикле есть.
увы, не помогло...

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Урок 44. События в ListView

Сообщение siberprogs » 09 апр 2014, 06:55

vapsel писал(а): увы, не помогло...
Странно.
Вот мое активити с рабочего приложения, почти один в один с твоим, и все работает:
[syntax=java]package ru.siberprogs.plusminus;

import android.content.res.Resources;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;

/**
* Created by sergey on 23.02.14.
*/
public class TxtHelpActivity extends MyActivity{

private ArrayList<HashMap<String, Object>> list;
private static final String TITLE = "hitem";
SimpleAdapter tAdapter;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.txthelp);


Resources res = getResources();
String[] h1 = res.getStringArray(R.array.подсказка_пример);

ListView lvH = (ListView)findViewById(R.id.lvHelp);

list = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> hm;

for (int i=0; i< h1.length; i++) {
hm = new HashMap<String, Object>();

hm.put(TITLE, h1 ) ;
list.add(hm);

}
String[] from = {TITLE} ;
int[] to = {R.id.lvHelp} ;

tAdapter = new SimpleAdapter(this, list, R.layout.helpitem, from, to);
lvH.setAdapter(tAdapter);



}
}[/syntax]

Может у тебя в самих массивах что-нибудь не так?
У меня так:
[syntax=xml] <string-array name="подсказка_пример">
<item>Один</item>
<item>Два</item>
<item>Три</item>
<item>Четыре</item>
<item>Пять</item>
</string-array>[/syntax]
Linux Fedora RFRemix + Intellij Idea

Ответить