Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.16.184] |
|
Сообщ.
#1
,
|
|
|
Есть вот такая программа:
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/lvSimple" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_weight="0.20" > </ListView> <HorizontalScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Inside 1st HorizontalScrollView" /> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:text="Button A1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="Button A2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="Button A3" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="Button A4" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="Button A5" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout> </HorizontalScrollView> </LinearLayout> list.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/thisPeriod" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="#321fff" android:text="Large Text" android:width="80dp" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/prevousPeriod" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/thisPeriod" android:text="Large Text" android:width="80dp" android:textAppearance="?android:attr/textAppearanceSmall" /> </RelativeLayout> </LinearLayout> Код программы package prog2.pack; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class Prog2Activity extends Activity { /** Called when the activity is first created. */ final String LOG_TAG = "myLogs"; // имена атрибутов для Map final String ATTRIBUTE_NAME_TEXT = "text"; final String ATTRIBUTE_NAME_THIS = "thisPeriod"; final String ATTRIBUTE_NAME_PREVIOUS = "previouse"; ListView lvSimple; //Класс с данными cLink link; @SuppressWarnings("null") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); OnItemClickListener clickLis = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parrent, View view, int position, long id) { // TODO Auto-generated method stub //Здесь по клику нужно пройтись циклом по всем элементам ListView и изменить значения в TextView с id thisPeriod SimpleAdapter adapter = (SimpleAdapter)parrent.getAdapter(); LinearLayout ll = (LinearLayout)view; TextView tv = (TextView)ll.findViewById(R.id.thisPeriod); tv.setText("123"); } }; Resources res = getResources(); String[] arr = res.getStringArray(R.array.pokazateli); link = new cLink(arr); String texts[] = link.GetNameArray(); String thisP[] = link.GetThisArray(1); String previous[] = link.GetPreviousArray(); ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>( texts.length); Map<String, Object> m; for (int i = 0; i < texts.length; i++) { m = new HashMap<String, Object>(); m.put(ATTRIBUTE_NAME_TEXT, texts[i]); m.put(ATTRIBUTE_NAME_THIS, thisP[i]); m.put(ATTRIBUTE_NAME_PREVIOUS, previous[i]); data.add(m); } // массив имен атрибутов, из которых будут читаться данные String[] from = { ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_PREVIOUS, ATTRIBUTE_NAME_THIS }; // массив ID View-компонентов, в которые будут вставлять данные int[] to = { R.id.name, R.id.prevousPeriod, R.id.thisPeriod}; // создаем адаптер SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.list, from, to); // определяем список и присваиваем ему адаптер lvSimple = (ListView) findViewById(R.id.lvSimple); lvSimple.setAdapter(sAdapter); lvSimple.setOnItemClickListener(clickLis); } } class MySimpleAdapter extends SimpleAdapter { public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); } } При событии onItemClick нужно изменить во всех элементах списка значения в TextView с id=thisPeriod |
Сообщ.
#2
,
|
|
|
Методом проб и ошибок мне пришлось потратить 3 дня для того чтоб найти ответ на свой вопрос.
Напишу как нужно делать может кому-то еще поможет. public void onItemClick(AdapterView<?> parrent, View view, int position, long id) { // TODO Auto-generated method stub MySimpleAdapter adapter = (MySimpleAdapter)parrent.getAdapter(); for(int i = 0; i < adapter.getCount(); i++) { //Мы можем получить доступ к каждому значению и изменить его Map m = (Map)adapter.getItem(i); //Для тех кто не знает при вставке данных в Map с существующим ключём значение заменяется m.put(ATTRIBUTE_NAME_THIS, "123"); } //После всех манипуляций нужно вызвать данную функцию //она сама произведет обновление данных в нашем списке adapter.notifyDataSetChanged(); } |
Сообщ.
#3
,
|
|
|
Можно же просто сделать наследника BaseAdapter, который будет отображать в нужном виде любую структуру данных. Волки должны быть отдельно, а овцы отдельно.
|