自定义ListView适配器。隐藏特定值。 Android的

时间:2013-11-20 08:48:09

标签: java android listview baseadapter

我在使用自定义ListView适配器时遇到了一些麻烦 我发送请求到一个网站,它给了我一些数据的xml。然后我解析xml,并在ListView扩展BaseAdapter的类的帮助下将收到的数据放入startIndex。但有时我的请求数据太多,所以最好的方法是从网站询问不是所有数据,而是范围值,然后将它们放入客户端的ArrayList中。

当用户按下Forward按钮时,新的值从站点接收并被放入ArrayList,然后用户按下Backward按钮,因此在这种情况下没有必要向网站发出请求,因为数据已经存储在ArrayList中。

我使用endIndexView getView()变量在加载的数据之间以及从Web服务器询问新数据时进行导航。我试图设置哪些值应该在我的适配器的ListView方法中显示,但在这种情况下我的应用程序崩溃了。这是代码。如何仅加载@Override public View getView(int position, View convertView, ViewGroup parent) { // I tried to add only specific values, here my app crashes if (position < startIndex || position > endIndex) return null; View view = convertView; if (view == null){ view = this.lInflater.inflate(R.layout.book_item,parent,false); } Book b = getBook(position); TextView tv = (TextView)view.findViewById(R.id.authorName); tv.setText(b.author); tv = (TextView) view.findViewById(R.id.bookName); tv.setText(b.name); CheckBox chBox = (CheckBox)view.findViewById(R.id.basketChk); chBox.setOnCheckedChangeListener(this); chBox.setTag(position); chBox.setChecked(b.getStatus()); return view; } 中的特定数据。

全部谢谢!

{{1}}

2 个答案:

答案 0 :(得分:0)

据我所知,您需要在检索缓存数据时添加新数据列表,您可以通过添加/删除/更新适配器中使用的集合中的数据来执行此操作。并调用yourAdapter.notifyDataSetChanged()将适配器重新加载到列表中。

答案 1 :(得分:0)

我对您的要求的理解是:
您将首先根据某个范围从站点获取特定的数据集并将其显示给用户。当用户点击向前时,如果没有从网上获取并显示该数据,您将检查该范围的数据,当用户点击后显示以前的数据时。

基于这种理解,我提出以下解决方案:
1.维护一个HashMap,其范围为关键,并将来自该范围的网站数据的ArrayList作为值 2.现在使用此HashMap检查范围的数据是否可用。如果没有从我们那里获取它并将其添加到HashMap并使用它 3.在为ListView创建适配器时,创建新的ArrayList并将其作为源传递。
4.现在根据您是否拥有HashMap中给定范围的数据,或者从Web获取并添加HashMap,清除适配器中传递的ArrayList并添加所有新数据并在adater上调用notifyDataChange。 p>


我希望步骤清晰有用。