На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Перебор и изменение элементов в ListView , Как перебрать все элементы в ListView циклом и изменить данные
    Есть вот такая программа:

    main.xml
    ExpandedWrap disabled
      <?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
    ExpandedWrap disabled
      <?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>


    Код программы
    ExpandedWrap disabled
      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
      Методом проб и ошибок мне пришлось потратить 3 дня для того чтоб найти ответ на свой вопрос.

      Напишу как нужно делать может кому-то еще поможет.

      ExpandedWrap disabled
                                  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();
         
                    }
        Можно же просто сделать наследника BaseAdapter, который будет отображать в нужном виде любую структуру данных. Волки должны быть отдельно, а овцы отдельно.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0285 ]   [ 15 queries used ]   [ Generated: 27.04.24, 05:53 GMT ]