2014-03-29 236 views
0

我有android應用程序,它顯示一個擴展Base Adapter以獲取圖像和文本的列表視圖。 現在我想爲這個列表視圖添加一個標題部分如何做到這一點?誰能幫我 ???如何添加標題部分到Android中的列表視圖?

這是列表視圖是如何顯示enter image description here

我wnat的是,第一個項目之前顯示標題和最後一個項目之前顯示的標題。

activity_group_list.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".GroupList" > 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</RelativeLayout> 

row_list_group.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" 
    android:orientation="horizontal" 
    android:padding="5dip" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:src="@drawable/algeria_flag" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/imageView1" 
     android:ems="10" 
     android:text="text" /> 

</RelativeLayout> 

ItemDetails.java
package com.devleb.expandablelistdemo3; 

public class ItemDetails { 

    String Name; 
    int image; 
    public String getName() { 
     return Name; 
    } 
    public void setName(String name) { 
     Name = name; 
    } 
    public int getImage() { 
     return image; 
    } 
    public void setImage(int image) { 
     this.image = image; 
    } 


} 

CustomAdapter.java
package com.devleb.expandablelistdemo3; 

import java.util.ArrayList; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView.FindListener; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class CustomAdapter extends BaseAdapter { 

    private static ArrayList<ItemDetails> itemDetailsarrayList; 

    LayoutInflater layoutInflater; 
    String[] teamName; 
    int[] teamFlag; 
    Context context; 

    public CustomAdapter(ArrayList<ItemDetails> result, Context c) { 
     itemDetailsarrayList = result; 
     context = c; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return itemDetailsarrayList.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return itemDetailsarrayList.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     layoutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = layoutInflater.inflate(R.layout.row_list_group, parent, 
       false); 
     TextView txt = (TextView) row.findViewById(R.id.textView1); 
     ImageView imgv = (ImageView) row.findViewById(R.id.imageView1); 
     txt.setText(itemDetailsarrayList.get(position).getName()); 
     imgv.setImageResource(itemDetailsarrayList.get(position).getImage()); 

     return row; 
    } 

} 

GroupList.java

package com.devleb.expandablelistdemo3; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.ClipData.Item; 
import android.view.Menu; 
import android.widget.ListView; 

public class GroupList extends Activity { 

    int[] img = { R.drawable.brazil_flag, R.drawable.croatian_flag, 
      R.drawable.mexico_flag, R.drawable.cameroon_flag, R.drawable.spain, 
      R.drawable.netherlands_flag, R.drawable.czech_republic_flag, 
      R.drawable.australia, R.drawable.colombia_flag, R.drawable.gress, 
      R.drawable.cote_divoire_flag, R.drawable.japan, 
      R.drawable.uruguay_flag, R.drawable.costa_rica_flag, 
      R.drawable.england_flag, R.drawable.italy_flag, 
      R.drawable.switzerland, R.drawable.ecuador_flag, 
      R.drawable.france_flag, R.drawable.honduras_flag, 
      R.drawable.argentina_flag, R.drawable.bousna, R.drawable.iran_flag, 
      R.drawable.nigeria_flag, R.drawable.germany_flag, 
      R.drawable.portugal, R.drawable.ghana_flag, 
      R.drawable.united_states_flag, R.drawable.belgium_flag, 
      R.drawable.algeria_flag, R.drawable.russia_flag, 
      R.drawable.korea_flag }; 
    String[] name = { "BRA", "CRO", "MEX", "CMR", "ESP", "NED", "CHI", "AUS", 
      "COL", "GRE", "CIV", "JPN", "URU", "CRC", "ENG", "ITA", "SUI", 
      "ECU", "FRA", "HON", "ARG", "BIH", "IRN", "NGA", "GER", "POR", 
      "GHA", "USA", "BEL", "ALG", "RUS", "KOR" }; 

    ItemDetails item_details; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_group_list); 

     ArrayList<ItemDetails> result = getList(); 
     ListView lv = (ListView) findViewById(R.id.list); 
     lv.setAdapter(new CustomAdapter(result, getApplicationContext())); 

    } 

    private ArrayList<ItemDetails> getList() { 
     ArrayList<ItemDetails> results = new ArrayList<ItemDetails>(); 
     for (int i = 0; i <32; i++) { 
      item_details = new ItemDetails(); 
      item_details.setName(name[i]); 
      item_details.setImage(img[i]); 
      results.add(item_details); 
     } 
     return results; 
    } 

添加部分

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_group_list); 

     TextView txtSection = (TextView)findViewById(R.id.textSeparator); 

     ArrayList<ItemDetails> result = getList(); 
     lv = (ListView) findViewById(R.id.list); 
     lv.addHeaderView(txtSection); 
     lv.setAdapter(new CustomAdapter(result, getApplicationContext())); 

    } 

    private ArrayList<ItemDetails> getList() { 
     ArrayList<ItemDetails> results = new ArrayList<ItemDetails>(); 
     for (int i = 0; i <4; i++) { 
      item_details = new ItemDetails(); 
      View layout_section = getLayoutInflater().inflate(R.layout.activity_group_section_list, null); 
      lv.addHeaderView(layout_section); 
      item_details.setName(name[i]); 
      item_details.setImage(img[i]); 
      results.add(item_details); 
     } 
     return results; 
    } 


    } 

日誌貓

03-29 08:30:34.271: E/AndroidRuntime(2900): Caused by: java.lang.NullPointerException 
03-29 08:30:34.271: E/AndroidRuntime(2900):  at com.devleb.expandablelistdemo3.GroupList.getList(GroupList.java:59) 
+0

你想要固定的頁眉和頁腳嗎? –

+0

不,我想在每個標題不同的值,喜歡將每個項目分類到一個類別 – user3006788

+0

對於這種類型的listview你只是去可擴展的列表視圖它會給你所期望的listview .... –

回答

0

在組列表中onCreate方法只需添加以下行:

ListView lv = (ListView) findViewById(R.id.list); 
lv.addHeaderView(<place your header view here>); 

addHeaderView期望獲得View對象。所以,你可以用兩種方式將頁眉:

//Programmatically create button (or other view, that you need) and place it: 
Button b = new Button(this); 
lv.addHeaderView(b); 

// Create xml layout, inflate it and place into listview as header view 
View yourLayout = getLayoutInflater().inflate(R.layout.your_view_layout, null); 
lv.addHeaderView(yourLayout); 
+0

所以你建議是我添加一個佈局文件,我將它添加到** lv.addHeaderView(); ** – user3006788

+0

你可以根據我的代碼給我這2個選項嗎? – user3006788

+0

我已經更新了我的答案 –

0

在你row_list_group.xml,創建一個標題佈局和可見性設置爲走了。然後在需要添加標題時將其設置爲可見。

或者你可以嘗試什麼Nickolai曾建議:

這樣,你需要創建一個佈局,並在列表中的適配器getView方法運行時添加到列表視圖。

+0

首先你的意思是我添加一個**佈局,其中包括一個具有視覺效果的textView:去**第二在這種情況下,頭將被固定或每個頭可以得到不同的值? – user3006788

+0

雅,你可以改變列表適配器的getView方法中的值 – amalBit

相關問題