Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MergeAdapter和ClassCastException(带有LinearLayout$LayoutParams和AblistView$LayoutParams)_Java_Android_Android Listview_Android Adapter_Classcastexception - Fatal编程技术网

Java MergeAdapter和ClassCastException(带有LinearLayout$LayoutParams和AblistView$LayoutParams)

Java MergeAdapter和ClassCastException(带有LinearLayout$LayoutParams和AblistView$LayoutParams),java,android,android-listview,android-adapter,classcastexception,Java,Android,Android Listview,Android Adapter,Classcastexception,我正在尝试使包含列表视图的整个布局可滚动。也就是说,整个布局应该拥有滚动条,而不仅仅是列表视图。我试图使用commonsguy的MergeAdapter(),但我认为我没有正确实现它,因为我遇到了以下错误: 07-07 11:05:20.431: E/AndroidRuntime(24474): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widg

我正在尝试使包含
列表视图的整个布局可滚动。也就是说,整个布局应该拥有滚动条,而不仅仅是
列表视图
。我试图使用commonsguy的
MergeAdapter
(),但我认为我没有正确实现它,因为我遇到了以下错误:

07-07 11:05:20.431: E/AndroidRuntime(24474): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.ListView.setupChild(ListView.java:1872)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.ListView.makeAndAddView(ListView.java:1841)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.ListView.fillDown(ListView.java:681)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.ListView.fillFromTop(ListView.java:742)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.ListView.layoutChildren(ListView.java:1659)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.AbsListView.onLayout(AbsListView.java:2431)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at     android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:690)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.View.layout(View.java:14482)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewGroup.layout(ViewGroup.java:4469)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2151)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1970)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1183)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4863)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.Choreographer.doFrame(Choreographer.java:532)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.os.Handler.handleCallback(Handler.java:725)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.os.Looper.loop(Looper.java:137)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at android.app.ActivityThread.main(ActivityThread.java:5328)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at java.lang.reflect.Method.invokeNative(Native Method)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at java.lang.reflect.Method.invoke(Method.java:511)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-07 11:05:20.431: E/AndroidRuntime(24474):    at dalvik.system.NativeStart.main(Native Method)
下面是课程:

public class HomeFragment extends Fragment implements Navigable {

private ListView mHomeList;
private String[] mHomeListStrings = {"lorem","ipsum","loremm","ipsumm"};
private Integer[] mImageIds = {null, null, null, null};
private MergeAdapter mMergeAdapter;

public HomeFragment() { }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_home, container, false);

    //Set string spannable
    String s= "Name\nBusiness";
    SpannableString ss1=  new SpannableString(s);
    ss1.setSpan(new RelativeSizeSpan(1.5f), 0,4, 0); // set size
    TextView tv= (TextView) rootView.findViewById(R.id.home_header);
    tv.setText(ss1); 

    //Set up list view
    mHomeList = (ListView) rootView.findViewById(R.id.home_list);
    ListAdapter adapter = new ListAdapter(getActivity(), mHomeListStrings, mImageIds);

    //I'm doing something wrong either here, or with my xml layout (I think)
    mMergeAdapter = new MergeAdapter();
    mMergeAdapter.addView(rootView.findViewById(R.id.home_header));
    mMergeAdapter.addAdapter(adapter);
    mMergeAdapter.addView(rootView.findViewById(R.id.apply_button));

    mHomeList.setAdapter(mMergeAdapter);

    return rootView;

}
}
我的片段布局如下(我去掉了item属性以使其更短):


您应该尝试将页眉和页脚添加到列表中,而不是将
列表视图
放在
滚动视图

简单地将视图从列表的顶部和底部放到不同的xml布局中

将列表视图放在上面的布局和JAVA中,将这些a布局充气并分别添加为页眉和页脚


MergeAdapter
的情况下,尝试将页眉(
TextView
)和页脚(
按钮
)放在不同的xml中,并将其充气,而不是使用同一xml

确保您为所有视图定义了高度和宽度???@Soumil,日志猫补充道;ρцσѕρєK,所有视图都有一个定义的高度和宽度-我将把它们添加到我发布的代码中。哎呀,我刚刚注意到,问题可能是我的项目有一个定义的
布局权重
,和
0
layout\u width
?这不是
MergeAdapter
内部正在做的吗?我将尝试将它们放在不同的xml文件中并发回。很抱歉,没有看到您的代码。我认为问题在于,一旦将textview和button放入xml中,它们就变成了LinearLayout的子视图,而layout param被设置为linear layout的layout param。尝试添加新的文本视图和按钮。你是对的,添加一个
新文本视图
新按钮
成功了。
<LinearLayout 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:orientation="vertical"
tools:context="com.xxxx.core.HomeFragment" 
android:background="@drawable/bg">

    <TextView
    android:id="@+id/home_header"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="0.5">

    <ListView
    android:id="@+id/home_list"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="2">
    </ListView>

    <Button
    android:id="@+id/apply_button"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="0.30"/>

</LinearLayout>