#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. Я только что поделился рабочим примером действия с нужной вам функциональностью; Надеюсь, вы найдете его полезным.