Страница 6 из 8

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

Добавлено: 18 ноя 2013, 20:16
evgens
Подскажите очень простую, на мой взгляд, вещь:

Есть 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}

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

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

Добавлено: 01 дек 2013, 21:33
Nialon
evgens, уже решили?

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

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

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

Добавлено: 02 дек 2013, 20:04
evgens
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]);
			
		}
		
	};

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

Добавлено: 02 дек 2013, 20:11
Nialon
Ну, правильно сделали, поиск рулит. =)

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

Добавлено: 09 дек 2013, 17:40
Alex14
Добрый день

Как и большинство новичок.
Знания в 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?

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

Добавлено: 09 дек 2013, 18:01
Foenix
все есть в уроках

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

Добавлено: 09 дек 2013, 19:33
Alex14
Foenix писал(а):все есть в уроках

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

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

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

Добавлено: 30 мар 2014, 17:02
vapsel
помогите пожалуйста в решением задачи: есть два списка разделы и подразделы. Нужно реализовать переход от одного к другому в зависимости от пункта раздела - в свои подразделы. облазил кучу форумов, проблема в том, как определить какой пункт списка нажат (его реальное название).
код 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>

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

Добавлено: 30 мар 2014, 17:25
siberprogs
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

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

Добавлено: 30 мар 2014, 18:45
Foenix
определить какой пункт нажат можно с помощью переменной position

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

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

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

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

Добавлено: 01 апр 2014, 21:49
Foenix
попробуйте такой код вставить

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

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();
                }
надеюсь, разберетесь - там айтемы в тостик выводятся.

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

Добавлено: 01 апр 2014, 21:50
Foenix
http://myandroidtipsandtricks.blogspot. ... -item.html
вот еще ссылки. По-английски это selected item. Разберетесь.

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

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

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

Добавлено: 05 апр 2014, 17:36
vapsel
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;

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

Добавлено: 08 апр 2014, 14:54
vapsel
появилась новая проблема. снова надеюсь на вашу помощь ;)
при нажатии на элемент списка 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);
		
	}
	}

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

Добавлено: 08 апр 2014, 16:35
siberprogs
[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)

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

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

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

Добавлено: 09 апр 2014, 06:55
siberprogs
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]