2014-05-20 53 views
0

我有一個自定義視圖(一個擴展視圖類),我想添加爲列表視圖的標題。這裏的代碼片段:添加自定義視圖作爲ListView的標題

public class MyActivity extends RoboListActivity { 
    ... 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     View header = getLayoutInflater().inflate(R.layout.myactivity_apps_header, null); 
     getListView().addHeaderView(header); 
...more code 
} 

但是,我什麼都看不見。但是,當我嘗試添加非自定義視圖時,它可以正常工作。我失去了一些東西,請大家指導

提供了完整的源代碼

自定義視圖

public class SpaceCustomView extends View { 

    private Paint mPaint; 
    private Paint mTextPaint; 
    private final String mMessage = "Foo Bar"; 
    private Rect mBounds; 


    public StorageSpaceCustomView(Context context) { 
     super(context); 
     initInput(); 
    } 

    public StorageSpaceCustomView(Context context, AttributeSet attrs) { 
     super(context, attrs, 0); 
     initInput(); 
    } 

    public StorageSpaceCustomView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initInput(); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); 
    } 

    @Override 
    public void onDraw(android.graphics.Canvas canvas) { 

     canvas.drawRect(30, 30, 800, 80, mPaint); 
     canvas.drawText(mMessage, 30, 60, mTextPaint); 
    } 


    private void initInput() { 
     mBounds = new Rect(); 

     mPaint = new Paint(); 
     mPaint.setColor(Color.RED); 
     mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 

     mTextPaint = new Paint(); 
     mTextPaint.setColor(Color.BLACK); 
     mTextPaint.setTextAlign(Paint.Align.LEFT); 
     mTextPaint.setTextSize(20); 
     mTextPaint.getTextBounds(mMessage, 0, mMessage.length(), mBounds); 
    } 

} 

頁眉佈局XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <com.mycompany.app.view.custom.SpaceCustomView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

活動課

public class AppsActivity extends RoboListActivity { 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //add header and footer views 
     View header = getLayoutInflater().inflate(R.layout.activity_apps_header, null); 
     getListView().addHeaderView(header); 

     View footer = getLayoutInflater().inflate(R.layout.activity_pps_footer, null); 
     getListView().addFooterView(footer); 

     List<AppInfo> applicationList = Mycatalog.getPromotions(); 

     AppListAdapter adapter = new AppListAdapter(this, applicationList); 
     setListAdapter(adapter); 


    } 


    private class AppListAdapter extends ArrayAdapter<AppInfo> { 
     public AppListAdapter(Activity activity, List<AppInfo> apps) { 
      super(activity, android.R.layout.simple_list_item_1, apps); 
     } 

     @Override 
     public boolean isEmpty(){ 
      return false; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // if we weren't given a view, inflate one 
      if (null == convertView) { 
       convertView = getLayoutInflater() 
         .inflate(R.layout.activity_uninstall_apps, null); 
      } 


      return convertView; 
     } 

    } 


} 

結論:我可以看到頁腳而不是頁眉。

+1

該代碼沒有問題。你只需要膨脹你的頭部視圖,然後調用'addHeaderView'。佈局文件中可能有錯誤。 – ashishduh

+0

如果您提供所有相關代碼(包括XML佈局),則會更加清晰 –

回答

2

ListView僅當適配器的isEmpty()返回false時才顯示頁眉和頁腳。 因此,嘗試設置一個適配器,它可以做到這一點......

+0

重寫isEmpty(返回false)沒有幫助。 – user3277846

相關問題