2014-05-20 2 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; 
     } 

    } 


} 
,536,913을 제공

을 안내하시기 바랍니다

결론 : 바닥 글은 보이지만 머리글은 볼 수 없습니다.

+1

해당 코드에는 아무 문제가 없습니다. 헤더 뷰를 부 풀린 다음'addHeaderView'를 호출하면됩니다. 레이아웃 파일에 문제가있을 수 있습니다. – ashishduh

+0

XML 레이아웃을 포함하여 모든 관련 코드를 제공하면 더 명확 해집니다 –

답변

2

ListView는 어댑터의 isEmpty()이 false를 반환 할 때만 머리글과 바닥 글을 표시합니다. 그렇게하는 어댑터를 설정하십시오 ...

+0

isEmpty (return false)를 재정 의하여 도움이되지 않았습니다. – user3277846