开发者社区> 问答> 正文

listview时报ClassCaseException:报错

自己写ListView后,在onCreat()里findViewById获得listview后强转成自己写的listview时报ClassCaseException:报错

自己写自定义ListView类后,在onCreat()里findViewById获得View后强转成自己写的listview时报ClassCaseException

麻烦大家帮我看看,很急,已经赶了三天三夜了


MainActicity.java

package lzy.app.jobSystem;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
	
	 public TestAdapter adapter;  
	 public PinnedHeaderListView listView;
	
	
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //adapter = new TestAdapter(getLayoutInflater());   
        
        adapter = new TestAdapter(this);
       // System.out.println(this.findViewById(R.id.section_list_view));
        listView = (PinnedHeaderListView) this.findViewById(R.id.section_list_view); 
        listView.setAdapter(adapter); 
        listView.setOnScrollListener(adapter);
        listView.setPinnedHeaderView(getLayoutInflater().inflate(  
                R.layout.section_list_item, listView, false));  
        
        
    }
}

ClassCaseException异常定位在这句listView = (PinnedHeaderListView) this.findViewById(R.id.section_list_view);



自己的ListView类:

package lzy.app.jobSystem;
	
	
	  
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
	  
	
	public class PinnedHeaderListView extends ListView {  
	  
	  
	    public interface PinnedHeaderAdapter {  
	  
	       
	        public static final int PINNED_HEADER_GONE = 0;  
	  
	        
	        public static final int PINNED_HEADER_VISIBLE = 1;  
	  
	        
	        public static final int PINNED_HEADER_PUSHED_UP = 2;  
	  
	       
	        int getPinnedHeaderState(int position);  
	  
	        
	        void configurePinnedHeader(View header, int position);  
	    }  
	  
	    private static final int MAX_ALPHA = 255;  
	  
	    private PinnedHeaderAdapter mAdapter;  
	    /** 显示在顶端的item */  
	    private View mHeaderView;  
	    private boolean mHeaderViewVisible;  
	  
	    private int mHeaderViewWidth;  
	  
	    private int mHeaderViewHeight;  
	  
	    public PinnedHeaderListView(Context context) {  
	        super(context);  
	    }  
	  
	    public PinnedHeaderListView(Context context, AttributeSet attrs) {  
	        super(context, attrs);  
	    }  
	  
	    public PinnedHeaderListView(Context context, AttributeSet attrs,  
	            int defStyle) {  
	        super(context, attrs, defStyle);  
	    }  
	  
	    public void setPinnedHeaderView(View view) {  
	        mHeaderView = view;  
	  
	        // Disable vertical fading when the pinned header is present  
	        // TODO change ListView to allow separate measures for top and bottom  
	        // fading edge;  
	        // in this particular case we would like to disable the top, but not the  
	        // bottom edge.  
	        if (mHeaderView != null) {  
	            // 设置边框渐变的长度  
	            setFadingEdgeLength(0);  
	        }  
	        // requestLayout();  
	    }  
	  
	    public void setAdapter(ListAdapter adapter) {  
	        super.setAdapter(adapter);  
	        mAdapter = (PinnedHeaderAdapter) adapter;  
	    }  
	  
	    @Override  
	    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
	        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
	        // 得到mHeaderViewz的宽、高  
	        if (mHeaderView != null) {  
	            measureChild(mHeaderView, widthMeasureSpec, heightMeasureSpec);  
	            mHeaderViewWidth = mHeaderView.getMeasuredWidth();  
	            mHeaderViewHeight = mHeaderView.getMeasuredHeight();  
	        }  
	    }  
	  
	    @Override  
	    protected void onLayout(boolean changed, int left, int top, int right,  
	            int bottom) {  
	        super.onLayout(changed, left, top, right, bottom);  
	        if (mHeaderView != null) {  
	            mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);  
	            configureHeaderView(getFirstVisiblePosition());  
	        }  
	    }  
	  
	    public void configureHeaderView(int position) {  
	        if (mHeaderView == null) {  
	            return;  
	        }  
	        int state = mAdapter.getPinnedHeaderState(position);  
	        switch (state) {  
	        case PinnedHeaderAdapter.PINNED_HEADER_GONE: {  
	            // mHeaderViewVisible = false;  
	            break;  
	        }  
	  
	        case PinnedHeaderAdapter.PINNED_HEADER_VISIBLE: {  
	            mAdapter.configurePinnedHeader(mHeaderView, position);  
	            // if (mHeaderView.getTop() != 0) {  
	            // mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);  
	            // }  
	            // mHeaderViewVisible = true;  
	            break;  
	        }  
	  
	        case PinnedHeaderAdapter.PINNED_HEADER_PUSHED_UP: {  
	            View firstView = getChildAt(0);  
	            int bottom = firstView.getBottom();  
	            int headerHeight = mHeaderView.getHeight();  
	            int y;  
	            if (bottom < headerHeight) {  
	                y = (bottom - headerHeight);  
	            } else {  
	                y = 0;  
	            }  
	            mAdapter.configurePinnedHeader(mHeaderView, position);  
	            if (mHeaderView.getTop() != y) {  
	                mHeaderView.layout(0, y, mHeaderViewWidth, mHeaderViewHeight  
	                        + y);  
	            }  
	            mHeaderViewVisible = true;  
	            break;  
	        }  
	        }  
	    }  
	  
	    @Override  
	    protected void dispatchDraw(Canvas canvas) {  
	        super.dispatchDraw(canvas);  
	        if (mHeaderViewVisible) {  
	            drawChild(canvas, mHeaderView, getDrawingTime());  
	        }  
	    }

	}


main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    
     
    
    
    <FrameLayout 
        android:layout_width="fill_parent"
    	android:layout_height="fill_parent" >
        
	    <TextView
	        android:layout_width="fill_parent"
	   		android:layout_height="wrap_content"
	   		android:layout_gravity="top"
	   		android:background="@drawable/topbar2"
	   		android:text="  U - Job"
	   		android:textColor="#FFFFFF"
	   		android:textSize="40dp"
	   		android:id="@+id/topBar"
	   		/>
	    
	    <RelativeLayout 
	        android:layout_width="fill_parent"
	    	android:layout_height="fill_parent"
	        >
		    <Button
		        android:layout_width="45dp"
		        android:layout_height="45dp"
		        android:layout_alignParentRight="true"
		        android:layout_alignTop="@id/topBar" 
		        android:background="@drawable/refresh"
		         />
	    </RelativeLayout>

    </FrameLayout>
    
        
        
      
          
        <LinearLayout  
	    android:layout_width="match_parent"
	    android:layout_height="fill_parent"
	    android:orientation="vertical" >

	        <TextView   
	        android:layout_width="fill_parent"
	   		android:layout_height="wrap_content"
	   		android:background="@drawable/topbar2"
	   		android:text="header"
	   		android:textColor="#FFFFFF"
	   		android:textSize="40dp"
	   		/>     
	        
	        <TextView
	        android:layout_width="fill_parent"
	   		android:layout_height="wrap_content"
	   		android:text="header_text"
	   		android:textSize="40dp"
	   		/>       
		</LinearLayout>
        
        
        
        
        
        
         <ListView 
         android:layout_width="fill_parent"
   		 android:layout_height="wrap_content"
         android:text="header"
         android:textSize="40dp"
         android:id="@+id/section_list_view"
         />
     
    
        
        
</LinearLayout>



section_list_item.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    

        <TextView   
        android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:background="@drawable/topbar2"
   		android:text="header"
   		android:textColor="#FFFFFF"
   		android:textSize="40dp"
   		android:id="@+id/header"
   		/>     
        
        <TextView
        android:layout_width="fill_parent"
   		android:layout_height="wrap_content"
   		android:text="header_text"
   		android:textSize="40dp"
   		android:id="@+id/example_text_view"
   		/>
        

        
        
</LinearLayout>

展开
收起
kun坤 2020-06-09 22:08:28 586 0
1 条回答
写回答
取消 提交回答

  • 亲,你明白了吗?

      <ListView
    73          android:layout_width="fill_parent"
    74          android:layout_height="wrap_content"
    75          android:text="header"
    76          android:textSize="40dp"
    77          android:id="@+id/section_list_view"
    78          />


    应该改为:
      <lzy.app.jobSystem.PinnedHeaderListView 
    73          android:layout_width="fill_parent"
    74          android:layout_height="wrap_content"
    75          android:text="header"
    76          android:textSize="40dp"
    77          android:id="@+id/section_list_view"
    78          />


    ######非常感谢,原来自己的标签要包名,没经验弄了一整天######

    main.xml里面listview应该改成你自定义的吧

    ######非常感谢,以前没见过添加自定义的标签,弄了一天原来要加包名才能实现######

    亲,只有PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。

    @supperman 正解

    ######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了。######

    引用来自“jacky2058”的评论

    亲,只有PinnedHeaderListView 可以转为listView ,listView不可以转为PinnedHeaderListView 的。

    @supperman 正解

    目测楼主小白一只~######谢谢哈哈,原来不能用这样方法拿出来,后来我用了代码动态插入那个ListView就好了######

    这是什么 lzy.app.jobSystem. PinnedHeaderListView包名,lzy=楼主呀

    ######haha,对啊,自己的项目包名
    2020-06-09 22:08:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载