我想知道如何分割我的ListView
部分并在用户启动我的应用时只显示其中的一部分,并在用户按下名为“加载更多项目”的按钮时显示其他部分。
我有一个超过500个项目的大清单,并考虑将其分成几部分,以便加载速度快。
我希望功能类似于任何电子邮件应用,它在底部提供了一个选项来加载更多电子邮件。
如果有人有我的问题的示例代码,那么请分享其他一些指导也将不胜感激。
答案 0 :(得分:3)
根据您的问题,您似乎最初需要加载少量项目,然后在用户点击“加载更多项目”按钮时加载更多项目。
为此可能有两种情况:
第一种情况: webservice可以发送部分响应,例如第一次发送20个项目,以及下次每当用户点击“加载更多项目”按钮时的20个项目。
第二种情况:如果你得到500件作为回应,那么为了实现“加载更多项目”的那种功能,你必须创建数据库表来存储所有项目。完成数据库值存储后,最初获取20个项目,下次加载20个项目,依此类推。
答案 1 :(得分:3)
很好地实现一个按钮很容易:
在你的onCreate中,用前50个项目加载你的适配器,然后实现一个带有onClickListener的按钮,它会添加下一个50等。
无论其 我认为你真正想要做的是懒加载你的listview,以便它们滚动,它会加载更多的项目 - 这就是为什么你不需要用额外的按钮来混淆UI。
为此你的listactivity应该实现OnScrollListener
这是一个例子:Android Endless List
答案 2 :(得分:0)
最初在列表视图中加载部分数据。
你必须使用Handler
的概念。 onclick事件你必须将消息发送到处理程序内部处理程序,你必须编写逻辑来加载你的完整数据并调用notifydataSetChanged
方法
查看下面的示例代码。最初用户可以看到列表的某些部分。如果用户cvlicks任何列表项,则列表用户可以看到整个列表视图。它与您期望的类似。
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MyListView extends ListActivity {
ArrayList<String> pens = new ArrayList<String>();
ArrayAdapter arrayAdapter = null;
private static final byte UPDATE_LIST = 100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pens.add("MONT Blanc");
pens.add("Gucci");
pens.add("Parker");
arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, pens);
setListAdapter(arrayAdapter);
getListView().setTextFilterEnabled(true);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
System.out.println("..Item is clicked..");
Message msg = new Message();
msg.what = UPDATE_LIST;
updateListHandler.sendMessage(msg);
}
});
// System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
// System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
System.out.println("...11configuration is changed...");
}
void addMoreDataToList() {
pens.add("item1");
pens.add("item2");
pens.add("item3");
}
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Object o = this.getListAdapter().getItem(position);
String pen = o.toString();
Toast.makeText(this, id + "You have chosen the pen: " + " " + pen,
Toast.LENGTH_LONG).show();
}
private Handler updateListHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_LIST:
addMoreDataToList();
arrayAdapter.notifyDataSetChanged();
break;
}
;
};
};
}
由于 迪帕克