Урок 46. События ExpandableListView

Обсуждение уроков
Izergin
Сообщения: 1
Зарегистрирован: 29 янв 2014, 17:18

Re: Урок 46. События ExpandableListView

Сообщение Izergin » 29 янв 2014, 17:32

Добрый день. Буду очень признателен за помощь. При нажатии на произвольно выбранный айтем в ExpandableListView нужно чтобы запускался активити с WebView, которая должна открывать html страницу из папки assets. Как это реализовать? - если можно подробно с кодом, у меня еще нет достаточного опыта. Никак не могу связать код из урока 32 и 46. Заранее спасибо.

feboll
Сообщения: 6
Зарегистрирован: 04 ноя 2013, 22:22

Re: Урок 46. События ExpandableListView

Сообщение feboll » 08 май 2014, 23:13

Друзья. Нужна ваша помощь. Не могу понять как реализовать добавление в подсписок элементов при нажатии на заголовок группы.
Помогите плиз

арсений мамонов
Сообщения: 1
Зарегистрирован: 02 июн 2014, 07:30

Re: Урок 46. События ExpandableListView

Сообщение арсений мамонов » 02 июн 2014, 07:32

ExpandableListView.OnChildClickListener не работает
Здравствуйте. Я написал проект по туториалу андроида http://www.vogella.com/tutorials/Androi ... ew_example И у меня получилось и меню и подменюшки. Далее я попробовал сделать так, чтобы при нажатии на подменюшку открывался html файл, но здесь застрял - ExpandableListView.OnChildClickListener не работает. Поискал в гугле советы - не помогло. Можете пожалуйста посмотреть проект? вот он http://dropmefiles.com/EQdZY
Что неправильно?

Alex_odessa
Сообщения: 1
Зарегистрирован: 13 июн 2014, 15:59

Re: Урок 46. События ExpandableListView

Сообщение Alex_odessa » 13 июн 2014, 16:08

В 46 уроке в конце методе onCreate есть строка: elvMain.expandGroup(2); При первом запуске обрабатывается метод onCreate и разворачивается список под номером 2. Почему после поворота экрана - метод onCreate снова обрабатывается, проходит через строку elvMain.expandGroup(2); - но на этот раз список под номером 2 не открывается?

energomaks2012
Сообщения: 4
Зарегистрирован: 18 июн 2014, 11:29

Re: Урок 46. События ExpandableListView

Сообщение energomaks2012 » 19 июн 2014, 16:41

Ребята, родненькие, помогите пожалуйста, уже облазил весь форум и интернет! Я полный чайник, но очень желаю научиться программировать.Создал боковое меню с помощью ExpandableListView но не знаю как вызвать новый activity с элемента.

[syntax=javascript]
elvMain.setOnChildClickListener(new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {

Как обработать событие??????????????

return false;
}
}); [/syntax]

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

Re: Урок 46. События ExpandableListView

Сообщение Foenix » 19 июн 2014, 18:38

с помощью intent, как обычно. Есть же урок.
R.id.team

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

energomaks2012
Сообщения: 4
Зарегистрирован: 18 июн 2014, 11:29

Re: Урок 46. События ExpandableListView

Сообщение energomaks2012 » 20 июн 2014, 12:10

Добрый ты человек Foenix, спасибо, буду тренироваться. Как хорошо, что есть люди которые создают подобные форумы и сайты.

Spinner
Сообщения: 9
Зарегистрирован: 26 сен 2013, 20:51

Re: Урок 46. События ExpandableListView

Сообщение Spinner » 01 июл 2014, 11:23

Подскажите пожалуйста, как реализовать обновление списка одной группы при нажатии на группу? Точнее при действии onGroupExpand. Вношу изменения путем замены строк, которые добавляются в коллекцию childData, согласно уроку и вызываю notifyDataSetChanged() для адаптера, но ничего не происходит до пересоздания окна. СПАСИБО :D Залил свой вопрос на StackOverFlow также: http://stackoverflow.com/questions/2451 ... -the-group Выручайте, ребята!!!!!!
Последний раз редактировалось Spinner 01 июл 2014, 22:15, всего редактировалось 6 раз.

v_grechka
Сообщения: 20
Зарегистрирован: 09 авг 2012, 13:30

Re: Урок 46. События ExpandableListView

Сообщение v_grechka » 01 июл 2014, 11:34

Как реализовать длинный клик на Child элементе ExpandableListView?
На группе стандартно.
Регистрируем контекстное меню для элемента

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

registerForContextMenu(elvMain);
на группе работает. Все ОК. Но если я пробую тоже меню вызвать на Child-элементе вываливатеся ошибка

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

07-01 08:23:28.051: W/dalvikvm(382): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-01 08:23:28.072: E/AndroidRuntime(382): FATAL EXCEPTION: main
07-01 08:23:28.072: E/AndroidRuntime(382): java.lang.ClassCastException: android.widget.LinearLayout
07-01 08:23:28.072: E/AndroidRuntime(382): 	at ru.mail.Energo_map.Energo_mapActivity$2.onItemLongClick(Energo_mapActivity.java:188)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.widget.AbsListView.performLongPress(AbsListView.java:1753)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.widget.AbsListView.access$600(AbsListView.java:72)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:1711)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.os.Handler.handleCallback(Handler.java:587)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.os.Handler.dispatchMessage(Handler.java:92)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.os.Looper.loop(Looper.java:123)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at java.lang.reflect.Method.invoke(Method.java:521)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-01 08:23:28.072: E/AndroidRuntime(382): 	at dalvik.system.NativeStart.main(Native Method)
В инете нашел решение
http://stackoverflow.com/questions/2834 ... nu#2834892
но...

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

registerForContextMenu(getExpandableListView());
требует реализовать метод getExpandableListView() :( :(
Т.е. получается для ExpandableListView нужно 2 раза регистрировать контекстное меню. Для группы и чаилдов
Вопрос снят. сам начудил. в Лонгклике хотел определить название нажатого эл-та

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

//TextView textView = (TextView) arg1;
				//Element_name = textView.getText().toString();
А в случае с чаилдом, arg1 ловился как LinearLayout, о чем и сообщала эклипса перед тем как вывалится в ошибку :)

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 27 окт 2014, 15:14

Добрый день.

Делаю ListView - трехуровневый.

Adapter_tovar.java

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

package com.example.threelevelexpandablelistview;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class Adapter_tovar extends BaseExpandableListAdapter {
  private List<Object_gr> objects;
  private Activity activity;
  private LayoutInflater inflater;
 
 public Adapter_tovar(Activity activity, List<Object_gr> objects) {
   this.objects= objects;
   this.activity= activity;
   this.inflater= (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }

 @Override
 public Object_gr getChild(int groupPosition, int childPosition) {
  return objects.get(groupPosition).getObjects().get(childPosition);
 }

 @Override
 public long getChildId(int groupPosition, int childPosition) {
  return childPosition;
 }

 @Override
 public View getChildView(int groupPosition, int childPosition,
   boolean isLastChild, View convertView, ViewGroup parent) {
  
  Object_gr object= (Object_gr) getChild(groupPosition, childPosition);
  CustomExpandableListView subObjects= (CustomExpandableListView) convertView;;
  if (convertView==null) {
   subObjects= new CustomExpandableListView(activity);
  }
  Adapter2 adapter= new Adapter2(activity, object);
  subObjects.setAdapter(adapter);
  
  return subObjects;
 }

 @Override
 public int getChildrenCount(int groupPosition) {
  return objects.get(groupPosition).getObjects().size();
 }

 @Override
 public Object_gr getGroup(int groupPosition) {
  return objects.get(groupPosition);
 }

 @Override
 public int getGroupCount() {
  return objects.size();
 }
 
 @Override
 public long getGroupId(int groupPosition) {
  return groupPosition;
 }
 
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded,
   View convertView, ViewGroup parent) {

  Object_gr object= (Object_gr) getGroup(groupPosition);
  if (convertView==null) {
   convertView= inflater.inflate(R.layout.listview_element, null);
  }
  
  TextView name= (TextView) convertView.findViewById(R.id.name);
  name.setText(object.getName());

  return convertView;
 }

 @Override
 public boolean hasStableIds() {
  return true;
 }

 @Override
 public boolean isChildSelectable(int groupPosition, int childPosition) {
  return true;
 }
}


class Adapter2 extends BaseExpandableListAdapter {
 private Object_gr object;
 private LayoutInflater inflater; 
 private Activity activity;
 final String LOG_TAG = "myLogs";
 
 public Adapter2(Activity activity, Object_gr object) {
  this.activity= activity;
  this.object= object;
  this.inflater= (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
 
 }

 @Override
 public Object_gr getChild(int groupPosition, int childPosition) {
  return object.getObjects().get(childPosition);
 }

 @Override
 public long getChildId(int groupPosition, int childPosition) {
  return childPosition;
 }

 @Override
 public View getChildView(int groupPosition, int childPosition,
   boolean isLastChild, View convertView, ViewGroup parent) {

  Object_gr object= (Object_gr) getChild(0, childPosition);
  if (convertView==null) {
   convertView= inflater.inflate(R.layout.listview_element, null);

   Resources r = activity.getResources();
   float px40 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, r.getDisplayMetrics());
   convertView.setPadding(
     convertView.getPaddingLeft() + (int) px40,
     convertView.getPaddingTop(),
     convertView.getPaddingRight(),
     convertView.getPaddingBottom());
  }
  
  TextView name= (TextView) convertView.findViewById(R.id.name);
  name.setText(object.getName());
  TextView kod= (TextView) convertView.findViewById(R.id.kod);
  kod.setText(object.getKod());
  return convertView;
 }

 @Override
 public int getChildrenCount(int groupPosition) {
  return object.getObjects().size();
 }

 @Override
 public Object_gr getGroup(int groupPosition) {
  return object;
 }
 
 @Override
 public int getGroupCount() {
  return 1;
 }
 
 @Override
 public long getGroupId(int groupPosition) {
  return groupPosition;
 }
 
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded,
   View convertView, ViewGroup parent) {

  if (convertView==null) {
   convertView= inflater.inflate(R.layout.listview_element, null);
   Resources r = activity.getResources();
   float px20 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
   convertView.setPadding(
     convertView.getPaddingLeft() + (int) px20,
     convertView.getPaddingTop(),
     convertView.getPaddingRight(),
     convertView.getPaddingBottom()); 
  }

  TextView name= (TextView) convertView.findViewById(R.id.name);
  name.setText(object.getName());
  
  return convertView;
 }

 @Override
 public boolean hasStableIds() {
  return true;
 }

 @Override
 public boolean isChildSelectable(int groupPosition, int childPosition) {
  return true;
 }
 

}

Object_gr.java

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

package com.example.threelevelexpandablelistview;

import java.util.List;


public class Object_gr {
	String name;
	String kod;
	List<Object_gr> objects;
	
	public Object_gr(String name, List<Object_gr> objects, String kod) {
		this.name= name;
		this.kod= kod;
		this.objects= objects;
	}
	
	public String getName() {
		return this.name;
	}
	public String getKod() {
		return this.kod;
	}
	
	public List<Object_gr> getObjects() {
		return this.objects;
	}


}

Tovar_gr.java

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

package com.example.threelevelexpandablelistview;

import java.util.ArrayList;
import java.util.List;


import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.RelativeLayout;

public class Tovar_gr extends Activity {
	public static CustomExpandableListView list;
	final String LOG_TAG = "myLogs";
	

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		int noObjectsLevel1= 5;
		int noObjectsLevel2= 4;
		int noObjectsLevel3= 7;
		List<Object_gr> objectsLvl1= new ArrayList<Object_gr>();
		for (int i=0; i<noObjectsLevel1; i++) {
			List<Object_gr> objectsLvl2= new ArrayList<Object_gr>();
			for (int j=0; j<noObjectsLevel2; j++) {
				List<Object_gr> objectsLvl3= new ArrayList<Object_gr>();
				for (int k=0; k<noObjectsLevel3; k++) {
					objectsLvl3.add(new Object_gr("lvl3_"+String.valueOf(k), null,"--1--"));
				}
				objectsLvl2.add(new Object_gr("lvl2_"+String.valueOf(j), objectsLvl3,"--2--"));
			}
			objectsLvl1.add(new Object_gr("lvl1_"+String.valueOf(i), objectsLvl2,"--3--"));
		}
		
		RelativeLayout parent= (RelativeLayout) findViewById(R.id.parent);
		
		list= new CustomExpandableListView(this);
		Adapter_tovar adapter= new Adapter_tovar(this, objectsLvl1);
        list.setAdapter(adapter);
        
      
       // элемент нажатие
        list.setOnChildClickListener(new OnChildClickListener() {
		@Override
		public boolean onChildClick(ExpandableListView parent, View v,
				int groupPosition, int childPosition, long id) {
	        Log.d(LOG_TAG, "groupPosition = " + groupPosition + 
	                " childPosition = " + v + " id = " + id);
			return false;
		}
    });
        parent.addView(list);       

	}
	
}

class CustomExpandableListView extends ExpandableListView {	
	public CustomExpandableListView(Context context) {
		super(context);     
	}
	



	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		/*
		 * Adjust height
		 */
		heightMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}  
}

Все отображается как надо.
Возникла проблема с обработкой события "onChildClick" - не реагирует.

Проверял "onGroupClick" - работает как нужно.

Подскажите как мне обработать событие "onChildClick" .

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 28 окт 2014, 11:10

Ну очень нужна помощь!

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 46. События ExpandableListView

Сообщение altwin » 28 окт 2014, 11:25

sae74 писал(а):Ну очень нужна помощь!
попробуйте в xml файле к ExpandableListView добавить
[syntax=xml]android:descendantFocusability="blocksDescendants"[/syntax]
Изображение

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 28 окт 2014, 11:35

altwin писал(а): попробуйте в xml файле к ExpandableListView добавить
[syntax=xml]android:descendantFocusability="blocksDescendants"[/syntax]
Попробовал - не реагирует.

Прикрепил файл проекта.
Может так будет проще подсказать в чем моя ошибка.
Вложения
MainActivity.rar
(925.56 КБ) 131 скачивание

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 46. События ExpandableListView

Сообщение altwin » 28 окт 2014, 11:47

sae74 писал(а):
altwin писал(а): попробуйте в xml файле к ExpandableListView добавить
[syntax=xml]android:descendantFocusability="blocksDescendants"[/syntax]
Попробовал - не реагирует.

Прикрепил файл проекта.
Может так будет проще подсказать в чем моя ошибка.
В этом проекте onChildClick не реализован вообще и соответственно не работает.
Изображение

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 28 окт 2014, 11:48

Как его реализовать?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 46. События ExpandableListView

Сообщение altwin » 28 окт 2014, 11:57

sae74 писал(а):Как его реализовать?
так же как в вопросе - достаточно. Можете switch по childPosition добавить -не особо важно, если isChildSelectable в true установлен на момент вызова, то конфликт может быть только в обработке клика из за конфликта с onClick который вызывается раньше, т.е. нужно для него кликабельность убить. Других проблем быть не должно.
Изображение

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 28 окт 2014, 11:59

altwin писал(а):
sae74 писал(а):Как его реализовать?
так же как в вопросе - достаточно. Можете switch по childPosition добавить -не особо важно, если isChildSelectable в true установлен на момент вызова, то конфликт может быть только в обработке клика из за конфликта с onClick который вызывается раньше, т.е. нужно для него кликабельность убить. Других проблем быть не должно.
Если вы мне хотя бы покажите как это сделать - буду вам признателен ОЧЕНЬ ДОЛГО!

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 46. События ExpandableListView

Сообщение altwin » 28 окт 2014, 12:05

Как угодно, например:
[syntax=java5]@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
// Create a switch that switches on the specific child position.
switch(childPosition) {
case 0:
// Go to child #0 specific class.
Intent child0Intent = new Intent(this, Child0Activity.class);
startActivity(child0Intent);
break;
case 1:
// Go to child #1 specific class.
Intent child1Intent = new Intent(this, Child1Activity.class);
startActivity(child1Intent);
break;
}
return false;
}[/syntax]
рабочий пример списка: http://www.mysamplecode.com/2012/10/and ... ample.html
Изображение

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 46. События ExpandableListView

Сообщение sae74 » 28 окт 2014, 13:03

Я наверное не чего не понимаю.....

Что не пробую - могу получить событие только по первому уровню.
По второму и по третьему - не сего не выходит.

В двухмерном списке все работает, в трехмерном - нет.

Аватара пользователя
ptaxsa
Сообщения: 10
Зарегистрирован: 30 ноя 2014, 22:24

Re: Урок 46. События ExpandableListView

Сообщение ptaxsa » 04 мар 2015, 15:28

Господа!!!!
Подскажите как по выбору элемента перейти в новый активити? Имеется ввиду что не просто выводить данные в текст вью, а создать новое окно. Intent (как в уроке 21) при выборе элемента, не воспринимается. :shock:

Ответить