BaseAdapter 未更新列表视图中的数据
Posted
技术标签:
【中文标题】BaseAdapter 未更新列表视图中的数据【英文标题】:BaseAdapter is not updating data in listview 【发布时间】:2015-11-12 10:01:04 【问题描述】:我正在尝试通过BaseAdapter
获取Arraylist<Hashmap<String, String>
,但BaseAdapter
仅显示ListView
中的第一个元素,这意味着它没有在`ListView 中显示完整的Arraylist
。
这是我的列表视图 xml Rating_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical"
android:background="#ffffff" >
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:gravity="center"
android:padding="15dp"
android:text="text"
android:textColor="#6eb5c4"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
这是 Rating_layout.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >
<include
android:id="@+id/custom_top"
android:layout_
android:layout_
layout="@layout/action_bar_popup" />
<LinearLayout
android:layout_
android:layout_
android:background="@drawable/new_background"
android:orientation="horizontal" >
<ListView
android:id="@+id/listView1"
android:layout_
android:layout_
android:layout_margin="20dp"
android:layout_weight="0.38"
android:divider="#000000"
android:dividerHeight="1dp" >
</ListView>
</LinearLayout>
</LinearLayout>
这是我用来设置CustomAdapter的方法
protected void Rating_info()
pop_pref = getSharedPreferences("rating_info", MODE_PRIVATE);
flag = pop_pref.getString("flag", null);
size = pop_pref.getInt("a",0);
for (int i = 0; i<=(size-1);i++)
app_detail.put("provider_name",pop_pref.getString("key"+i, null));
System.out.println("in for loop "+pop_pref.getString("key"+1, null));
// provider_name = pop_pref.getString("provider_name", null);
applist.add(app_detail);
if(flag.equalsIgnoreCase("-1"))
popup_dialog = new Dialog(Home_Screen.this);
popup_dialog.setContentView(R.layout.rating_layout);
popup_dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
popup_dialog.setCancelable(true);
//final View view = popup_dialog.findViewById(R.id.custom_top);
TextView tv1 = (TextView)popup_dialog.findViewById(R.id.textView1);
// RatingBar rb = (RatingBar)popup_dialog.findViewById(R.id.popup_ratingbar);
// ImageView close = (ImageView)popup_dialog.findViewById(R.id.close);
tv1.setText("Give Rating");
// rb.setRating(Float.parseFloat("2.0"));
ListView lv = (ListView) popup_dialog.findViewById(R.id.listView1);
ImageView close = (ImageView)popup_dialog.findViewById(R.id.close);
Custum_Adapter adapter = new Custum_Adapter(Home_Screen.this, applist);
lv.setAdapter(adapter);
这是我的自定义适配器
private class Custum_Adapter extends BaseAdapter
ArrayList<HashMap<String, String>> list;
public Custum_Adapter(Context context, ArrayList<HashMap<String, String>> applist)
this.list = applist;
@Override
public int getCount()
return list.size();
@Override
public Object getItem(int position)
return list.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
convertView = LayoutInflater.from(getApplicationContext())
.inflate(R.layout.rating_list, parent, false);
System.out.println("list size*******"+list.size());
HashMap<String, String> a = list.get(position);
System.out.println("Position of hash map----->"+position);
// String id = a.get("id");
String name = a.get("provider_name");
System.out.println("name--------->"+name);
// String c_cost = a.get("cost");
// String c_id = a.get("cost_id");
TextView tv = (TextView) convertView.findViewById(R.id.textView1);
// TextView tv1 = (TextView) convertView.findViewById(R.id.textView2);
// TextView tv2 = (TextView) convertView.findViewById(R.id.costing_id);
// TextView tv3 = (TextView) convertView.findViewById(R.id.cost);
tv.setText(name);
// tv1.setText(id);
// tv2.setText(c_id);
// tv3.setText(c_cost);
return convertView;
但它只显示列表中的一个项目,尽管我发送了一个包含五个项目的列表。
【问题讨论】:
您只在数组列表中添加了一项。这就是为什么。检查您的代码... 【参考方案1】:那么为什么它没有在列表视图中显示所有五个项目。
因为在 for 循环的每次迭代中,您都会覆盖您实例化的唯一 HashMap
的值,并仅在循环结束时将其添加到 ArrayList 中。类似的东西
for (int i = 0; i< size ;i++)
app_detail = new HashMap<>();
app_detail.put("provider_name",pop_pref.getString("key"+i, null));
System.out.println("in for loop "+pop_pref.getString("key"+1, null));
applist.add(app_detail);
应该这样做
【讨论】:
【参考方案2】:当您执行此操作时,您返回数组列表的大小为 1,因为数组列表仅包含哈希图。因此适配器认为您只有一个要显示的项目。您应该从数组列表中返回哈希图的大小。对所有其他方法执行相同操作。
@Override
public int getCount()
return list.size();
解决方案:
@Override
public int getCount()
return list.get(0).size();
【讨论】:
以上是关于BaseAdapter 未更新列表视图中的数据的主要内容,如果未能解决你的问题,请参考以下文章