Урок 45. Список-дерево ExpandableListView

Обсуждение уроков
Arch1e
Сообщения: 1
Зарегистрирован: 21 май 2014, 15:16

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Arch1e » 21 май 2014, 15:19

"А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне."
Скиньте пожалуйста такой полный код урока

MrMishka
Сообщения: 1
Зарегистрирован: 29 июл 2014, 23:03

Re: Урок 45. Список-дерево ExpandableListView

Сообщение MrMishka » 31 июл 2014, 12:59

Ребят Help!!!! Взялся за создание это листа и появилась очень много вопросов.Вообщем есть главное активити (на ней и должны будут происходить изменение) и есть Drawer menu тоже в этой активити , как раз с этим ExpandableListView и checkbox для каждой группы и child.Мне нужно что бы получилось , что при нажатии checkbox для одного или нескольких элементов какое либо действие отображалось в главной активити или изменяло его

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

package cosm.example.test;

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



import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.os.Build;

public class MainActivity extends Activity {
	// nav drawer title
	private CharSequence mDrawerTitle;
	private CharSequence mTitle;

	private DrawerLayout mDrawerLayout;
	private ExpandableListView mDrawerList;
	private ActionBarDrawerToggle mDrawerToggle;
	private MyExpandableAdapter mAdapter;

	private List<String> mListForGroup;
	private HashMap<String, List<String>> mMapForChild;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

mTitle = mDrawerTitle = getTitle();

		

		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		mDrawerList = (ExpandableListView) findViewById(R.id.myexpandablelistview);



		initData();

		mAdapter = new MyExpandableAdapter(this, mListForGroup, mMapForChild);

		mDrawerList.setAdapter(mAdapter);

		mDrawerList.setOnChildClickListener(myOnChildClickListener);
		mDrawerList.setOnGroupClickListener(myOnGroupClickListener);
		mDrawerList
				.setOnGroupCollapseListener(myOnGroupCollapseListener);
		mDrawerList.setOnGroupExpandListener(myOnGroupExpandListener);
	

		



		// enabling action bar app icon and behaving it as toggle button
		getActionBar().setDisplayHomeAsUpEnabled(true);
		getActionBar().setHomeButtonEnabled(true);

		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
			public void onDrawerClosed(View view) {
				getActionBar().setTitle(mTitle);
				// calling onPrepareOptionsMenu() to show action bar icons
				invalidateOptionsMenu();
			}

			public void onDrawerOpened(View drawerView) {
				getActionBar().setTitle(mDrawerTitle);
				// calling onPrepareOptionsMenu() to hide action bar icons
				invalidateOptionsMenu();
			}
		};

	}













	private void initData() {
		// TODO Auto-generated method stub
		mListForGroup = new ArrayList<String>();
		mMapForChild = new HashMap<String, List<String>>();
		
		mListForGroup.add("Цвета");
		mListForGroup.add("Картинки");


		List<String> listGroupA = new ArrayList<String>();
		listGroupA.add("1");
		listGroupA.add("2");
		listGroupA.add("3");


		List<String> listGroupB = new ArrayList<String>();
		listGroupB.add("1");
		listGroupB.add("2");
		listGroupB.add("3");




		mMapForChild.put(mListForGroup.get(0), listGroupA);
		mMapForChild.put(mListForGroup.get(1), listGroupB);

	}
	OnChildClickListener myOnChildClickListener = new OnChildClickListener() {

		@Override
		public boolean onChildClick(ExpandableListView parent, View v,
				int groupPosition, int childPosition, long id) {
		

			return true;
		}

	
		};


	OnGroupClickListener myOnGroupClickListener = new OnGroupClickListener() {

		@Override
		public boolean onGroupClick(ExpandableListView parent, View v,
				int groupPosition, long id) {
		
		
			return false;
		}
	};

	OnGroupCollapseListener myOnGroupCollapseListener = new OnGroupCollapseListener() {

		@Override
		public void onGroupCollapse(int groupPosition) {
			// group collapse at groupPosition
		}
	};

	OnGroupExpandListener myOnGroupExpandListener = new OnGroupExpandListener() {

		@Override
		public void onGroupExpand(int groupPosition) {
			// group expand at groupPosition
		}
	};


	@Override
	public void setTitle(CharSequence title) {
		mTitle = title;
		getActionBar().setTitle(mTitle);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);

		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// toggle nav drawer on selecting action bar app icon/title
		if (mDrawerToggle.onOptionsItemSelected(item)) {
			return true;
		}
		// Handle action bar actions click
		switch (item.getItemId()) {
		case R.id.action_settings:

			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	/***
	 * Called when invalidateOptionsMenu() is triggered
	 */
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// if nav drawer is opened, hide the action items
		boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
		menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
		return super.onPrepareOptionsMenu(menu);
	}

	/**
	 * When using the ActionBarDrawerToggle, you must call it during
	 * onPostCreate() and onConfigurationChanged()...
	 */

	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		// Sync the toggle state after onRestoreInstanceState has occurred.
		mDrawerToggle.syncState();
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		// Pass any configuration change to the drawer toggles
		mDrawerToggle.onConfigurationChanged(newConfig);
	}
	}


адаптер

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

package cosm.example.test;

import java.util.HashMap;
import java.util.List;


import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class MyExpandableAdapter extends BaseExpandableListAdapter {
	private static final String TAG = "myLogs";

	private Context context;
	private List<String> listGroup;
	private HashMap<String, List<String>> listChild;

	public MyExpandableAdapter(Context c, List<String> lg,
			HashMap<String, List<String>> lc) {
		context = c;
		listGroup = lg;
		listChild = lc;
	}

	@Override
	public Object getChild(int groupPosition, int childPosition) {
		return listChild.get(listGroup.get(groupPosition)).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) {

		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(R.layout.exp_list_child_item,
					null);
		}

		TextView textViewItem = (TextView) convertView.findViewById(R.id.item);

		String text = (String) getChild(groupPosition, childPosition);

		textViewItem.setText(text);
		return convertView;
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		return listChild.get(listGroup.get(groupPosition)).size();
	}

	@Override
	public Object getGroup(int groupPosition) {
		return listGroup.get(groupPosition);
	}

	@Override
	public int getGroupCount() {
		return listGroup.size();
	}

	@Override
	public long getGroupId(int groupPosition) {
		return groupPosition;
	}

	@Override
	public View getGroupView(final int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {

		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(R.layout.exp_list_group_item,
					null);
		}

		String textGroup = (String) getGroup(groupPosition);

		// get application resource/drawable not in Activity class, using
		// context

		final CheckBox chek = (CheckBox) convertView
				.findViewById(R.id.checkBox1);
		chek.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				// TODO Auto-generated method stub
				Log.d(TAG, "cheked  " + isChecked + groupPosition);
				chekedgrop(isChecked, groupPosition);
			}

			private void chekedgrop(boolean isChecked, int groupPosition) {
				// TODO Auto-generated method stub
				Activity activity = null;
				switch (groupPosition) {
				case 0:
					if (chek.isChecked()) {
		
						Log.d(TAG, "adapter  girne " + isChecked + groupPosition);

				
					
				
					} else {

					}

					break;
				case 1:

					Log.d(TAG, "adapter  fa " + isChecked + groupPosition);
					break;
				case 2:

					Log.d(TAG, "adapter  n " + isChecked + groupPosition);
					break;
				case 3:

					Log.d(TAG, "adapter   " + isChecked + groupPosition);
					break;

				default:
					break;
				}
			}

		});
		TextView textViewGroup = (TextView) convertView
				.findViewById(R.id.group);
		textViewGroup.setText(textGroup);

		return convertView;
	}



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

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}
}
сам layout главной активити

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

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- The main content view -->

    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer list -->

    <ExpandableListView
        android:id="@+id/myexpandablelistview"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@drawable/list_background"
        android:choiceMode="multipleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

</android.support.v4.widget.DrawerLayout>
Желательно хотелось бы развёрнутый ответ, а то я много ещё чего не понимаю :D
БУДУ ВСЕМ ПРИЗНАТЕЛЕН ЗА ПОМОЩЬ
Вложения
device-2014-07-31-124615.png
device-2014-07-31-124615.png (46.31 КБ) 13904 просмотра
device-2014-07-31-124607.png
device-2014-07-31-124607.png (43.36 КБ) 13904 просмотра
device-2014-07-31-124629.png
device-2014-07-31-124629.png (51.41 КБ) 13904 просмотра

LazeR
Сообщения: 7
Зарегистрирован: 02 сен 2014, 17:57

Re: Урок 45. Список-дерево ExpandableListView

Сообщение LazeR » 02 сен 2014, 17:59

Ребят, подскажите почему при тестировании другой странички у меня вылетает с ошибки (страничка с хеллоу вролд ), если удаляю этот код - тогда всё нормально.
public class MainActivity extends Activity {
наверно нужно менять активити для каждой странички?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 45. Список-дерево ExpandableListView

Сообщение klblk » 03 сен 2014, 07:37

LazeR писал(а):Ребят, подскажите почему при тестировании другой странички у меня вылетает с ошибки (страничка с хеллоу вролд ), если удаляю этот код - тогда всё нормально.
public class MainActivity extends Activity {
наверно нужно менять активити для каждой странички?
"страничка"?

LazeR
Сообщения: 7
Зарегистрирован: 02 сен 2014, 17:57

Re: Урок 45. Список-дерево ExpandableListView

Сообщение LazeR » 03 сен 2014, 09:41

ну layout

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 45. Список-дерево ExpandableListView

Сообщение klblk » 03 сен 2014, 10:54

Ну тогда разъясните:
1) что значит "при тестировании другой странички".
2) "вылетает с ошибки" - у любой ошибки есть имя и текст который написан в логах (красными буквами), если сами не можете в нем разобраться, то хотя бы следует прикрепить его к сообщению.
3) "если удаляю этот код" - вы имеете ввиду тот самый "этот код" или какой-то другой?
4) как это относится к этому уроку?

Аватара пользователя
Tamir
Сообщения: 2
Зарегистрирован: 15 сен 2014, 04:31

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Tamir » 15 сен 2014, 19:41

как заполнить Expandable ListView при помощи строкового массива ?
Имеется ввиду из StringArray
Изображение

То-есть другими словами , как сократить код

[syntax=java]
package com.example.hsidesheparsha;

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

import com.example.adapter.ExpandableListAdapter;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.ExpandableListView;

public class ListMenuTO extends Activity {

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;

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

Resources res = getResources();
String[] names = res.getStringArray(R.array.parshiet);

// get the listview
expListView = (ExpandableListView) findViewById(R.id.lv_to);

// preparing list data
prepareListData();

listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

// setting list adapter
expListView.setAdapter(listAdapter);


}

private void prepareListData() {

listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();

// // Adding child data
listDataHeader.add("בראשית");
listDataHeader.add("נח");
listDataHeader.add("לך לך");
listDataHeader.add("וירא");
listDataHeader.add("חיי שרה");
listDataHeader.add("תולדות");
listDataHeader.add("ויצא");
listDataHeader.add("וישלח");
listDataHeader.add("וישב");
listDataHeader.add("מקץ");
listDataHeader.add("ויגש");
listDataHeader.add("ויחי");
listDataHeader.add("וארא");
listDataHeader.add("בא");
listDataHeader.add("בשלח");
listDataHeader.add("יתרו");
listDataHeader.add("משפטים");
listDataHeader.add("תרומה");
listDataHeader.add("תצוה");
listDataHeader.add("פרשת זכור");
listDataHeader.add("כי תשא");
listDataHeader.add("ויקהל");
listDataHeader.add("מגלת אסתר");
listDataHeader.add("הוספות ויחי");
listDataHeader.add("הוספות שמות");
listDataHeader.add("הוספות יתרו");
listDataHeader.add("הוספות תצוה");
listDataHeader.add("הוספות כי תשא");
listDataHeader.add("הוספות ויקהל");
listDataHeader.add("הוספות מגלת אסתר");


// Adding child data
List<String> bereshit = new ArrayList<String>();
bereshit.add("א.א");
bereshit.add("א.ב");
bereshit.add("א.ג");
bereshit.add("א.ד");
bereshit.add("ב.א");
bereshit.add("ב.ב");
bereshit.add("ב.ג");

List<String> noah = new ArrayList<String>();
noah.add("א.א");
noah.add("א.ב");
noah.add("א.ג");
noah.add("א.ד");
noah.add("ב.א");
noah.add("ב.ב");

List<String> leh_leha = new ArrayList<String>();
leh_leha.add("א.א");
leh_leha.add("א.ב");
leh_leha.add("א.ג");
leh_leha.add("א.ד");
leh_leha.add("ב.א");

// Adding child data
List<String> vaira = new ArrayList<String>();
vaira.add("א.א");
vaira.add("א.ב");
vaira.add("א.ג");
vaira.add("א.ד");
vaira.add("ב.א");
vaira.add("ב.ב");
vaira.add("ב.ג");

// Adding child data
List<String> haei_sara = new ArrayList<String>();
haei_sara.add("א.א");
haei_sara.add("א.ב");
haei_sara.add("א.ג");
haei_sara.add("א.ד");
haei_sara.add("ב.א");
haei_sara.add("ב.ב");
haei_sara.add("ב.ג");

// Adding child data
List<String> toldot = new ArrayList<String>();
toldot.add("א.א");
toldot.add("א.ב");
toldot.add("א.ג");
toldot.add("א.ד");
toldot.add("ב.א");
toldot.add("ב.ב");
toldot.add("ב.ג");

// Adding child data
List<String> vaece = new ArrayList<String>();
vaece.add("א.א");
vaece.add("א.ב");
vaece.add("א.ג");
vaece.add("א.ד");
vaece.add("ב.א");
vaece.add("ב.ב");
vaece.add("ב.ג");

// Adding child data
List<String> vaishlah = new ArrayList<String>();
vaishlah.add("א.א");
vaishlah.add("א.ב");
vaishlah.add("א.ג");
vaishlah.add("א.ד");
vaishlah.add("ב.א");
vaishlah.add("ב.ב");
vaishlah.add("ב.ג");

// Adding child data
List<String> vaeshev = new ArrayList<String>();
vaeshev.add("א.א");
vaeshev.add("א.ב");
vaeshev.add("א.ג");
vaeshev.add("א.ד");
vaeshev.add("ב.א");
vaeshev.add("ב.ב");
vaeshev.add("ב.ג");

// Adding child data
List<String> mikezz = new ArrayList<String>();
mikezz.add("א.א");
mikezz.add("א.ב");
mikezz.add("א.ג");
mikezz.add("א.ד");
mikezz.add("ב.א");
mikezz.add("ב.ב");
mikezz.add("ב.ג");

// Adding child data
List<String> vaigash = new ArrayList<String>();
vaigash.add("א.א");
vaigash.add("א.ב");
vaigash.add("א.ג");
vaigash.add("א.ד");
vaigash.add("ב.א");
vaigash.add("ב.ב");
vaigash.add("ב.ג");

// Adding child data
List<String> vaehi = new ArrayList<String>();
vaehi.add("א.א");
vaehi.add("א.ב");
vaehi.add("א.ג");
vaehi.add("א.ד");
vaehi.add("ב.א");
vaehi.add("ב.ב");
vaehi.add("ב.ג");

// Adding child data
List<String> vaire = new ArrayList<String>();
vaire.add("א.א");
vaire.add("א.ב");
vaire.add("א.ג");
vaire.add("א.ד");
vaire.add("ב.א");
vaire.add("ב.ב");
vaire.add("ב.ג");

List<String> bo = new ArrayList<String>();
bo.add("א.א");
bo.add("א.ב");
bo.add("א.ג");
bo.add("א.ד");
bo.add("ב.א");
bo.add("ב.ב");
bo.add("ב.ג");

List<String> beshalah = new ArrayList<String>();
beshalah.add("א.א");
beshalah.add("א.ב");
beshalah.add("א.ג");
beshalah.add("א.ד");
beshalah.add("ב.א");
beshalah.add("ב.ב");
beshalah.add("ב.ג");

List<String> itro = new ArrayList<String>();
itro.add("א.א");
itro.add("א.ב");
itro.add("א.ג");
itro.add("א.ד");
itro.add("ב.א");
itro.add("ב.ב");
itro.add("ב.ג");

List<String> mishpatim = new ArrayList<String>();
mishpatim.add("א.א");
mishpatim.add("א.ב");
mishpatim.add("א.ג");
mishpatim.add("א.ד");
mishpatim.add("ב.א");
mishpatim.add("ב.ב");
mishpatim.add("ב.ג");

List<String> truma = new ArrayList<String>();
truma.add("א.א");
truma.add("א.ב");
truma.add("א.ג");
truma.add("א.ד");
truma.add("ב.א");
truma.add("ב.ב");
truma.add("ב.ג");

List<String> tezzave = new ArrayList<String>();
tezzave.add("א.א");
tezzave.add("א.ב");
tezzave.add("א.ג");
tezzave.add("א.ד");
tezzave.add("ב.א");
tezzave.add("ב.ב");
tezzave.add("ב.ג");

List<String> p_zahor = new ArrayList<String>();
p_zahor.add("א.א");
p_zahor.add("א.ב");
p_zahor.add("א.ג");
p_zahor.add("א.ד");
p_zahor.add("ב.א");
p_zahor.add("ב.ב");
p_zahor.add("ב.ג");

List<String> ki_tisa = new ArrayList<String>();
ki_tisa.add("א.א");
ki_tisa.add("א.ב");
ki_tisa.add("א.ג");
ki_tisa.add("א.ד");
ki_tisa.add("ב.א");
ki_tisa.add("ב.ב");
ki_tisa.add("ב.ג");

List<String> vayakel = new ArrayList<String>();
vayakel.add("א.א");
vayakel.add("א.ב");
vayakel.add("א.ג");
vayakel.add("א.ד");
vayakel.add("ב.א");
vayakel.add("ב.ב");
vayakel.add("ב.ג");

List<String> m_ester = new ArrayList<String>();
m_ester.add("א.א");
m_ester.add("א.ב");
m_ester.add("א.ג");
m_ester.add("א.ד");
m_ester.add("ב.א");
m_ester.add("ב.ב");
m_ester.add("ב.ג");

List<String> _vaehi = new ArrayList<String>();
_vaehi.add("א.א");
_vaehi.add("א.ב");
_vaehi.add("א.ג");
_vaehi.add("א.ד");
_vaehi.add("ב.א");
_vaehi.add("ב.ב");
_vaehi.add("ב.ג");

List<String> _shmot = new ArrayList<String>();
_shmot.add("א.א");
_shmot.add("א.ב");
_shmot.add("א.ג");
_shmot.add("א.ד");
_shmot.add("ב.א");
_shmot.add("ב.ב");
_shmot.add("ב.ג");

List<String> _itro = new ArrayList<String>();
_itro.add("א.א");
_itro.add("א.ב");
_itro.add("א.ג");
_itro.add("א.ד");
_itro.add("ב.א");
_itro.add("ב.ב");
_itro.add("ב.ג");

List<String> _tezzave = new ArrayList<String>();
_tezzave.add("א.א");
_tezzave.add("א.ב");
_tezzave.add("א.ג");
_tezzave.add("א.ד");
_tezzave.add("ב.א");
_tezzave.add("ב.ב");
_tezzave.add("ב.ג");

List<String> _ki_tisa = new ArrayList<String>();
_ki_tisa.add("א.א");
_ki_tisa.add("א.ב");
_ki_tisa.add("א.ג");
_ki_tisa.add("א.ד");
_ki_tisa.add("ב.א");
_ki_tisa.add("ב.ב");
_ki_tisa.add("ב.ג");

List<String> _vayakel = new ArrayList<String>();
_vayakel.add("א.א");
_vayakel.add("א.ב");
_vayakel.add("א.ג");
_vayakel.add("א.ד");
_vayakel.add("ב.א");
_vayakel.add("ב.ב");
_vayakel.add("ב.ג");

List<String> _m_ester = new ArrayList<String>();
_m_ester.add("א.א");
_m_ester.add("א.ב");
_m_ester.add("א.ג");
_m_ester.add("א.ד");
_m_ester.add("ב.א");
_m_ester.add("ב.ב");
_m_ester.add("ב.ג");

listDataChild.put(listDataHeader.get(0), bereshit); // Header, Child data
listDataChild.put(listDataHeader.get(1), noah);
listDataChild.put(listDataHeader.get(2), leh_leha);
listDataChild.put(listDataHeader.get(3), vaira);
listDataChild.put(listDataHeader.get(4), haei_sara);
listDataChild.put(listDataHeader.get(5), toldot);
listDataChild.put(listDataHeader.get(6), vaece);
listDataChild.put(listDataHeader.get(7), vaishlah);
listDataChild.put(listDataHeader.get(8), vaeshev);
listDataChild.put(listDataHeader.get(9), mikezz);
listDataChild.put(listDataHeader.get(10), vaigash);
listDataChild.put(listDataHeader.get(11), vaehi);
listDataChild.put(listDataHeader.get(12), vaire);
listDataChild.put(listDataHeader.get(13), bo);
listDataChild.put(listDataHeader.get(14), beshalah);
listDataChild.put(listDataHeader.get(15), itro);
listDataChild.put(listDataHeader.get(16), mishpatim);
listDataChild.put(listDataHeader.get(17), truma);
listDataChild.put(listDataHeader.get(18), tezzave);
listDataChild.put(listDataHeader.get(19), p_zahor);
listDataChild.put(listDataHeader.get(20), ki_tisa);
listDataChild.put(listDataHeader.get(21), vayakel);
listDataChild.put(listDataHeader.get(22), m_ester);
listDataChild.put(listDataHeader.get(23), _vaehi);
listDataChild.put(listDataHeader.get(24), _shmot);
listDataChild.put(listDataHeader.get(25), _itro);
listDataChild.put(listDataHeader.get(26), _tezzave);
listDataChild.put(listDataHeader.get(27), _ki_tisa);
listDataChild.put(listDataHeader.get(28), _vayakel);
listDataChild.put(listDataHeader.get(29), _m_ester);
}
}[/syntax]

и вместо длиннющего куска тип add.(""); передать готовый String[] массивчик.

Ну примерно как здесь


import android.os.Bundle;
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.activity_main);

Resources res = getResources();
String[] name = res.getStringArray(R.array. admurim) ;// это передаю готовый массив .admurim

ListView lv = (ListView) findViewById(R.id.lv);

//вот передаю String[] в ArrayAdapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,name);

lv.setAdapter(adapter);
}
}

Аватара пользователя
Tamir
Сообщения: 2
Зарегистрирован: 15 сен 2014, 04:31

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Tamir » 23 сен 2014, 00:45

Всё проблему решили на другом форуме

вот решение

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

private void prepareListData() {

		listDataHeader = new ArrayList<String>();
		listDataChild = new HashMap<String, List<String>>();
		
		Resources res = getResources();
		String] names = res.getStringArray(R.array.parshiet);
		for(String s: names)

evgen_dndz
Сообщения: 11
Зарегистрирован: 28 окт 2014, 14:43

Re: Урок 45. Список-дерево ExpandableListView

Сообщение evgen_dndz » 08 дек 2014, 01:43

Доброй ночи. Подскажите пожалуйста. Переписал уже в трех реализациях код и каждый раз ошибка одна. во всех случаях - ошибка одна... Как с этим бороться?
Создаю адаптер:

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

public class StocksAdapter extends BaseExpandableListAdapter {

    private Context context ;
    private ArrayList<Map<String,Object>> groups;
    private ArrayList<ArrayList<Map<String,Object>>> children;

    public  StocksAdapter ( Context context ,  ArrayList<Map<String, Object>> groups ,  ArrayList<ArrayList<Map<String, Object>>> children )
    {
        this.context = context;
        this.groups = groups;
        this.children = children;
    }
    @Override
    public boolean areAllItemsEnabled()
    {
        return true;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return children.get(groupPosition).get(childPosition);
    }

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

    // Return a child view. You can load your custom layout here.
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                             View convertView, ViewGroup parent) {
        Map mc = (HashMap) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.stocks_item, null);
        }

        TextView tvStockName = (TextView)convertView.findViewById(R.id.tvStockName);

            tvStockName.setText((CharSequence) mc.get("name"));

        TextView tvDescription = (TextView)convertView.findViewById(R.id.tvDescription);
        if (tvDescription != null)
            tvDescription.setText((CharSequence) mc.get("descr"));

        ImageView ivLogo = (ImageView) convertView.findViewById(R.id.ivLogo);
        Picasso.with(context).load(mc.get("logo").toString()).resize(75, 75).into(ivLogo);



//        convertView.setFocusableInTouchMode(true);
        return convertView;
    }

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

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    // Return a group view. You can load your custom layout here.
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                             ViewGroup parent) {
        Map mg= (HashMap) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(android.R.layout.simple_expandable_list_item_1, null);
        }

        TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
        if (text1 != null)
            text1.setText((CharSequence) mg.get("groupName"));

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

    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
        return true;
    }
}
упаковываю данные:

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

ArrayList<Map<String, Object>> groupData;
ArrayList<ArrayList<Map<String,Object>>> childData;
ArrayList<Map<String,Object>> childDataItem;
Map<String, Object> stocks_elem;

groupData = new ArrayList<Map<String, Object>>();
        for (String group : groupStocks) {
            stocks_elem = new HashMap<>();
            stocks_elem.put("groupName", group);
            groupData.add(stocks_elem);
        }
childData = new ArrayList<ArrayList<Map<String, Object>>>();
        for(int z=0; z<stocks_name.length();z++){
            stocks_elem = new HashMap<String,Object>();
            stocks_elem.put(STOCKS_NAME,sn[z]);
            stocks_elem.put(STOCKS_LOGO,sl[z]);
            stocks_elem.put(STOCKS_DESCR,sd[z]);
            childDataItem.add(stocks_elem);
            childData.add(childDataItem);
       }
нахожу список и скармливаю ему адаптер:

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

StocksAdapter adapter = new StocksAdapter(this,groupData,childData);
elvStocks = (ExpandableListView) findViewById(R.id.elvStocks);
        elvStocks.setAdapter(adapter);
В результате отображается список но при попытке его развернуть - приложение вылетает.
Лог:

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

12-08 00:28:11.260      327-327/? D/AndroidRuntime﹕ Shutting down VM
12-08 00:28:11.260      327-327/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-08 00:28:11.290      327-327/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
            at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
            at java.util.ArrayList.get(ArrayList.java:311)
            at com.example.fikus.restlist_geo_frag_activity.StocksAdapter.getChildrenCount(StocksAdapter.java:77)
            at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:561)
            at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:682)
            at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:567)
            at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:3683)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            at dalvik.system.NativeStart.main(Native Method)
Строка "(StocksAdapter.java:77)" указывает на код:
@Override
public int getChildrenCount(int groupPosition) {
return children.get(groupPosition).size();
}

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 16:30

Добр времени суток.

Нигде не нашел ни одного упоминания о сортировки записей в ExpandableListView
- у меня содержимое ExpandableListView - это папки.
И сортируются они по непонятному мне принципу.

А хотелось бы по понятному, по алфавиту или по дате создания


Help please!

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 45. Список-дерево ExpandableListView

Сообщение doter.ua » 05 фев 2015, 16:41

Kant писал(а):Добр времени суток.

Нигде не нашел ни одного упоминания о сортировки записей в ExpandableListView
- у меня содержимое ExpandableListView - это папки.
И сортируются они по непонятному мне принципу.

А хотелось бы по понятному, по алфавиту или по дате создания


Help please!
http://www.mkyong.com/java/java-object- ... omparator/ компаратор
http://stackoverflow.com/questions/9109 ... the-object
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 17:15

А круто) Это видимо в адапторе надо делать
и не проходит с таким массивом groupData = new ArrayList<Map<String, String>>();
Вложения
31243.jpg
31243.jpg (59.83 КБ) 13617 просмотров
123.jpg
123.jpg (65.53 КБ) 13618 просмотров
Последний раз редактировалось Kant 05 фев 2015, 17:20, всего редактировалось 1 раз.

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 17:16

А может можно не в адапторе а в ExpandableListView как то сделать сортировку

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 45. Список-дерево ExpandableListView

Сообщение KamiSempai » 05 фев 2015, 17:24

Сортировка делается перед передачей массива в адаптер.
doter.ua уже дал ссылки на правильные ресурсы. Там много вариантов, но вам, скорее всего, подойдет использование интерфейса Comparator.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 17:35

KamiSempai, а чего можно сделать - у меня на скринах, там им хочется что бы не строки были в массивах, а байты.
Можешь это как то прокомментировать)?
А то я не знаю как приспособиться)



строка создания массива такая :
groupData = new ArrayList<Map<String, String>>();
а скрины с ошибками выше
Последний раз редактировалось Kant 05 фев 2015, 17:46, всего редактировалось 1 раз.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 45. Список-дерево ExpandableListView

Сообщение KamiSempai » 05 фев 2015, 17:46

Вы не тот метод используете.
Нужно вот этот:
Collections.sort (List<T> list, Comparator<? super T> comparator)

И вот ссылка на русском, для понимания сортировок в java
http://echuprina.blogspot.ru/2012/02/co ... rator.html
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 17:48

Почитаю, спасибо!
Надеюсь получится.

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 18:19

KamiSempai, это получается очень сложно и очень долго разбираться ( если вообще удастся)
А самое главное то что в итоге - будет не совсем то что мне нужно..

Я понимаю что правильно - это изменять последовательность строк expandableListView в адапторе.
Но если мне надо поменять местами скажем первую и последнюю строку или первую и пятую строку,
может есть возможность сделать это без адаптера ?
( это не совсем сортировка)

Kant
Сообщения: 8
Зарегистрирован: 05 фев 2015, 16:23

Re: Урок 45. Список-дерево ExpandableListView

Сообщение Kant » 05 фев 2015, 18:56

Можно ли менять местами строки в ExpandableListView ?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 45. Список-дерево ExpandableListView

Сообщение doter.ua » 06 фев 2015, 00:12

Kant писал(а):Можно ли менять местами строки в ExpandableListView ?
Изменяй порядок в массиве, который передавал в адаптер при создании. Потом обнови адаптер с помощью notifydatasetchanged().
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить