如何在Android视图中添加条件getView (int position, View convertView, Vi



我有一个包含hashmapArraylist。hashmap包含主题名称、名称和值。例如像这样的hashmap对象。(示例中没有添加键)

{"Topic A", "Name 1" , "100"}  
{"Topic A", "Name 2" , "100"}  
{"Topic A", "Name 3" , "100"}  
{"Topic A", "Name 4" , "100"}  
{"Topic B", "Name 1" , "100"}  
{"Topic B", "Name 2" , "100"}  
{"Topic B", "Name 3" , "100"}  
{"Topic B", "Name 4" , "100"}  
{"Topic C", "Name 1" , "100"}  
{"Topic C", "Name 2" , "100"}  
{"Topic C", "Name 3" , "100"}  
{"Topic C", "Name 4" , "100"}  
{"Topic D", "Name 1" , "100"}  
{"Topic D", "Name 2" , "100"}  

我想创建一个像这样的列表视图

Topic A
=========================
name 1                100
name 2                100
name 3                100
name 4                100
Topic B
==========================
name 1                100
name 2                100
name 3                100
name 4                100

Topic C
==========================
name 1                100
name 2                100
name 3                100
name 4                100
Topic D
==========================
name 1                100
name 2                100
name 3                100
name 4                100

这是我的getView(int position, View convertView, ViewGroup parent)方法................

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null)
        v = inflater.inflate(R.layout.list_view_card_type, null);
    mTopic = (TextView) v.findViewById(R.id.topic);
    mItemname = (TextView) v.findViewById(R.id.name_of_item);
    mValue = (TextView)v.findViewById(R.id.value_of_item); 
    mTopic.setText(myArrayList.get(position).get("Topic"));
    mItemname.setText(myArrayList.get(position).get(
            "Name"));
    mValue.setText(myArrayList.get(position).get("Value"));
    return v;
}

这是我的列表视图。

<?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="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="#ffffff"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/topic"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:paddingLeft="10dp"
        android:textSize="28dp" />
    <TextView
        android:id="@+id/name_of_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:paddingLeft="10dp"
        android:textSize="28dp" />
    <TextView
        android:id="@+id/value_of_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:paddingLeft="10dp"
        android:textSize="28dp" />

</LinearLayout>

我尝试使用position值在getView方法中添加条件来做到这一点。但这让我很困惑。可以有人建议我该怎么做吗 ..............

像这样做,你可以做一些改变,我只是添加一个样本

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null)
        v = inflater.inflate(R.layout.list_view_card_type, null);
    mTopic = (TextView) v.findViewById(R.id.topic);
    mItemname = (TextView) v.findViewById(R.id.name_of_item);
    mValue = (TextView)v.findViewById(R.id.value_of_item); 
      String topic = "";
if(!(myArrayList.get(position).get("Topic").equals(topic )))
{
     mTopic.setText(myArrayList.get(position).get("Topic"));
      topic = myArrayList.get(position).get("Topic");
}else{
mTopic.setText("");}

    mItemname.setText(myArrayList.get(position).get(
            "Name"));
    mValue.setText(myArrayList.get(position).get("Value"));
    return v;
}

试试这个-

// define this as global
String lastTopic = "";
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null)
        v = inflater.inflate(R.layout.list_item, null);
    TextValue tv_topic = (TextView) v.findViewById(R.id.tv_topic);
    TextValue tv_item_name = (TextView) v.findViewById(R.id.tv_item_name);
    TextValue tv_item_value = (TextView) v.findViewById(R.id.tv_item_value);
    if (!(myArrayList.get(position).get("Topic").equals(lastTopic))) {
        tvTopic.setText(myArrayList.get(position).get("Topic"));
        lastTopic = myArrayList.get(position).get("Topic");
    } else {
        tvTopic.setVisibility(View.GONE);
    }
    tv_item_name.setText(myArrayList.get(position).get("Name"));
    tv_item_value.setText(myArrayList.get(position).get("Value"));
    return v;
}

相关内容

最新更新