Как обновить список в Android

#android #list

#Android #Список

Вопрос:

у меня есть список в Android. и на данный момент в нем 30 записей. но в моей активности я показываю только 5 записей … после 5 записей мне отображается кнопка
«Отобразить все данные»

когда я нажимаю на эту кнопку, она должна отображать все 30 записей и обновлять список действий. Пожалуйста, скажите мне, как я могу обновить. как мы делаем в AJAX в веб-технологии. я надеюсь, вы, ребята, понимаете, что я пытаюсь сказать?

Обновите действие без обновления всего действия. Пожалуйста, ответьте друзьям.

ждем положительного ответа.

Комментарии:

1. Итак, вы сохраняете список из всех 30 записей в переменной вашей активности, и вы хотите повторно заполнить элемент управления списком при нажатии кнопки? Как выглядит ваш код на данный момент?

Ответ №1:

Вы должны просто добавить вновь поступившие элементы в свой список данных (уже перечисленные 5 элементов) и вызвать notifyDatasetChanged() свою ListAdapter реализацию.

Обновить
Здесь я делюсь примером действия, которое содержит список и TextView внизу (увеличено с stepping_list.xml ), где список изначально содержит 5 элементов, а внизу — кнопку. При нажатии кнопки в список загружаются другие 25 значений, и кнопка исчезает.

Для этого нам понадобится основной макет, res/layout/stepping_list.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <TextView android:id="@ id/footer"
        android:layout_width="fill_parent" android:layout_height="60dp"
        android:background="@drawable/box"
        android:text="Lazy loading list in steps" android:textStyle="bold"
        android:gravity="center_vertical|center_horizontal"
        android:layout_alignParentBottom="true" />
    <ListView android:id="@ id/list"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:layout_alignParentTop="true" android:layout_above="@id/footer" />
</RelativeLayout>
  

Чтобы кнопка Загрузить дополнительные данные всегда появлялась после последнего элемента исходного списка (даже если до нее нужно прокрутить), я поместил ее в макет средства визуализации элементов списка. Таким образом, список будет иметь два средства визуализации элементов.

Обычный рендерер res/layout/row.xml :

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/textView" android:layout_alignParentRight="true"
    android:layout_width="fill_parent" android:layout_height="60dp"
    android:gravity="center_vertical|right" android:paddingRight="10dp"
    android:textSize="35dp"
    android:textColor="#2B78E4" />
  

является простым TextView средством визуализации для последнего элемента (исходного списка)
res/layout/row_with_button.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">
    <TextView android:id="@ id/textView"
        android:layout_alignParentRight="true"
        android:layout_width="fill_parent" android:layout_height="60dp"
        android:gravity="center_vertical|right" android:paddingRight="10dp"
        android:layout_weight="1" android:textColor="#2B78E4"
        android:textSize="35dp" />
    <Button android:id="@ id/loadbtn"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:layout_weight="1" android:text="Load more data"
        android:onClick="loadMoreData" />
</LinearLayout>
  

Наконец, Activity класс, который соединяет эти макеты:
SteppingListActivity.java :

 public class SteppingListActivity extends Activity
{
    private MyAdapter adapter;
    private ArrayList<Integer> values;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stepping_list);

        //initialize the list of data which will populate the list
        //TODO: You need to retrieve this data from the server, but I use
        //      here simple int values.
        values = new ArrayList<Integer>();
        for (int i = 0; i < 5; i  )
        {
            values.add((i % 2 == 0) ? i * 3 : i   3);
        }

        //initialize the adapter, and attach it to the ListView:
        adapter = new MyAdapter();
        final ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(adapter);
    }

    /**
     * The onClick function of the last itemrenderer's button
     * @param button the button clicked.
     */
    public void loadMoreData(View button)
    {
        //Just put some more data into the values ArrayList:
        //TODO: You need to retrieve these data from the server, as well!
        for (int i = 5; i < 30; i  )
        {
            values.add((i % 2 == 0) ? i * 3 : i   3);
        }
        //notify the ListAdapter about the changes:
        adapter.notifyDataSetChanged();
    }

    /**
     * The custom ListAdapter class used to populate the ListView
     */
    private class MyAdapter extends BaseAdapter
    {
        private LayoutInflater inflater;

        public MyAdapter()
        {
            inflater = LayoutInflater.from(SteppingListActivity.this);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            //check if the current item to show is the last item of the 
            //  initial list, and if so, inflate the proper renderer for it:
            if ((position == 4) amp;amp; (values.size() == 5))
                convertView = inflater.inflate(
                        R.layout.row_with_button, parent, false);
            else if ((convertView == null) || 
                    (convertView.findViewById(R.id.loadbtn) != null))
                convertView = inflater.inflate(R.layout.row, parent, false);
            //set the value of the TextView 
            ((TextView) convertView.findViewById(
                    R.id.textView)).setText(values.get(position)  ".50 €");

            return convertView;
        }
        @Override
        public int getCount()
        {
            return values.size();
        }
        @Override
        public Object getItem(int position)
        {
            return values.get(position);
        }
        @Override
        public long getItemId(int position)
        {
            return position;
        }
    }
}
  

Я надеюсь, вы поняли идею 🙂

Комментарии:

1. Я только что поделился рабочим примером действия с нужной вам функциональностью; Надеюсь, вы найдете его полезным.