碎片和适配器出现故障



我正在开发一个小应用程序,它应该显示3个屏幕:对话、论文和选择。我几天前发现了碎片,我想在我的应用程序中使用此功能,但不幸的是,由于特定原因,它不起作用…

我的碎片:

package info.androidhive.tabsswipe;
import java.io.IOException;
import java.util.List;
import be.unamur.confpers.beans.Paper;
import be.unamur.confpers.xml.XMLParser2;
import info.androidhive.tabsswipe.R;
import info.androidhive.tabsswipe.adapter.PaperAdapter;
import android.app.ListFragment;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import be.unamur.confpers.beans.Paper;
import be.unamur.confpers.xml.XMLParser2;
import be.unamur.confpers.*;
public class PapersFragment extends Fragment {
    private PaperAdapter listAdapter;
    private Context myContext;
    List<Paper> papers = null;
    private List<Paper> papersParser () {
        try {
            XMLParser2 parser = new XMLParser2();
            papers = parser.parse(getActivity().getApplicationContext().getAssets().open("talks.xml"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return papers;
    };
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_papers, container, false);
        ListView lv = (ListView) getActivity().findViewById(R.id.check1);
        listAdapter = new PaperAdapter(getActivity(),papers);
        //lv.setAdapter(listAdapter);
        return v;
    }
}

我的适配器:

package info.androidhive.tabsswipe.adapter;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import be.unamur.confpers.beans.Paper;
import info.androidhive.tabsswipe.R;
import java.util.ArrayList;
import java.util.List;
public class PaperAdapter extends BaseAdapter implements OnClickListener {
    private Context context;
    private List<Paper> papers;
    private LayoutInflater inflater;
    public PaperAdapter(Context context, List<Paper> papers) {
        this.context = context;
        this.papers = papers;
        inflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount(){
        return papers.size();
    }
    @Override
    public Object getItem(int position) {
        return papers.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        // We only create the view if its needed
        if (view == null) {
            view = inflater.inflate(R.layout.child_row, null);
            // Set the click listener for the checkbox
            view.findViewById(R.id.check1).setOnClickListener(this);
        }
        Paper p = (Paper) getItem(position);
        // Set the example text and the state of the checkbox
        CheckBox cb = (CheckBox) view.findViewById(R.id.check1);
        //cb.setChecked(p.isSelected());
        // We tag the data object to retrieve it on the click listener.
        TextView paper = (TextView)view.findViewById(R.id.papername);
        if (paper != null)
            paper.setText(p.getTitle());
        TextView author = (TextView)view.findViewById(R.id.authorname);
        if( author!= null )
            author.setText( p.getAuthor() );
        return view;
    }
    /*@Override
    /** Will be called when a checkbox has been clicked. */
    public void onClick(View view) {
    }

}

我的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="fill_parent"
android:layout_alignParentTop="true" >
   <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:layout_above="@+id/buttonsave" >
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <TextView
        android:id="@+id/papername"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>
<Button
    android:id="@+id/buttonsave"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="@string/btn_save" />
<Button
    android:id="@+id/buttonload"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:text="@string/btn_load" />
</RelativeLayout>

Group_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal" >
<TextView
    android:id="@+id/papername"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="50dp"
    android:textSize="18sp"
    android:textStyle="bold" />
</LinearLayout>

Child_row.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:orientation="horizontal" 
android:shrinkColumns="0">
<!-- 2 columns -->
<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left"
    android:paddingLeft="20dp"
     >
    <CheckBox
        android:id="@+id/check1"
        android:layout_height="wrap_content"
        android:layout_width="30dp"
        android:focusable="false"
         />
    <TextView
        android:id="@+id/papername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:textSize="16sp"
        android:textStyle="normal"
        android:layout_marginLeft="5dp" />
</TableRow>
<TableRow
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="50dp"
    android:paddingBottom="15dp" >
    <TextView
        android:id="@+id/authorname"
        android:layout_span="2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:textSize="16sp"
        android:textStyle="italic"
        android:layout_marginRight="5dp" />
</TableRow>
</TableLayout>

如果我离开

//lv.setAdapter(listAdapter);

评论,它加载了,但我一取消注释,它就崩溃了,并出现以下错误:

12-06 11:28:05.240:E/AndroidRuntime(1362):java.lang.ClassCastException:android.widget.TextView无法转换为android.wridget.ListView

参照这条精确的线。

您对ListView进行强制转换checkBox!

应该是那样的。ListView lv = (ListView) getActivity().findViewById(R.id.list);

I gusse here is the error in  your code:
      @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_papers, container, false);
            ListView lv = (ListView) getActivity().findViewById(R.id.check1);
//Here your casting checkBox to Listview Pleas Check it out
            listAdapter = new PaperAdapter(getActivity(),papers);
            //lv.setAdapter(listAdapter);
            return v;
        }
just replace it like
 ListView lv = (ListView) v.findViewById(R.id.ListviewName);

最新更新