我看不到ListFragment android?

时间:2014-11-22 12:22:45

标签: android android-fragments android-arrayadapter android-listfragment android-appcompat

我为show ListFragment创建Text & Image我的代码没有任何错误,但是当我运行它时,它会让我崩溃&当我看到Log它没有给我任何消息?

我的StartActivity.class

public class StartActivity extends ActionBarActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        getSupportFragmentManager().beginTransaction().replace(R.id.main_container,new Setting_Fragment()).commit();
    }
} 

我的activity_start.xml

<RelativeLayout 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:background="@drawable/back"
    tools:context="in.project.StartActivity" >

    <ImageView
        android:id="@+id/imgHeader"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:background="#e42769"
        android:src="@drawable/head" />

    <LinearLayout
        android:id="@+id/LFooter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:weightSum="6" >

        <ImageView
            android:id="@+id/img_Setting_note"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_setting_note" />

        <ImageView
            android:id="@+id/img_Calendar"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_calendar" />

        <ImageView
            android:id="@+id/img_Mail"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_mail" />

        <ImageView
            android:id="@+id/img_Review_note"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_review_note" />

        <ImageView
            android:id="@+id/img_Help"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_help" />

        <ImageView
            android:id="@+id/img_Setting"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/selector_setting" />
    </LinearLayout>

    <FrameLayout
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/LFooter"
        android:layout_below="@+id/imgHeader" />

</RelativeLayout>

我的SettingArrayAdapter.class

public class SettingArrayAdapter extends ArrayAdapter<Instructure_setting>{
    private Context context;
    private List<Instructure_setting> objects;

    public SettingArrayAdapter(Context context, int resource, List<Instructure_setting> objects) {
        super(context, resource);
        this.context = context;
        this.objects = objects;
    }

    @SuppressLint({ "ViewHolder", "InflateParams" })
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Instructure_setting _Data = objects.get(position);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.listview_setting_fragment, null);

        ImageView image = (ImageView) view.findViewById(R.id.img_message);
        image.setImageResource(_Data.getImageResource());

        TextView tv = (TextView) view.findViewById(R.id.txt_message);
        tv.setText(_Data.gettxtMessage());

        return view;
    }
}

我的Setting_Fragment.class

public class Setting_Fragment extends ListFragment{
    List<Instructure_setting> DATA = new Setting_Fragment_Data().getMessages();
    public Setting_Fragment()
    {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SettingArrayAdapter adapter = new SettingArrayAdapter(getActivity(),
                R.layout.listview_setting_fragment,
                DATA);
        setListAdapter(adapter);
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.setting_fragment, container, false);
        return rootView;
    }
}

我的setting_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".StartActivity" >

    <ListView
        android:id="@+id/lstview_Setting_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</RelativeLayout>

我的Setting_Fragment_Data.class

public class Setting_Fragment_Data {
    private List<Instructure_setting> _Messages = new ArrayList<Instructure_setting>();
    public List<Instructure_setting> getMessages() {
        return _Messages;
    }

    public Setting_Fragment_Data() {
        _Messages.add(new Instructure_setting("AAA", R.drawable.period_color));
        _Messages.add(new Instructure_setting("BBB", R.drawable.password_color));
        _Messages.add(new Instructure_setting("CCC", R.drawable.cleare_data_color));
        _Messages.add(new Instructure_setting("DDD", R.drawable.chanel_connect_color));
        _Messages.add(new Instructure_setting("EEE", R.drawable.backup_color));
        _Messages.add(new Instructure_setting("FFF", R.drawable.review_note_color));
        _Messages.add(new Instructure_setting("GGG", R.drawable.notification_color));
        _Messages.add(new Instructure_setting("HHH", R.drawable.sync_server_color));
    }
}

我的Instructure_setting.class

public class Instructure_setting {
     // constants for field references
    public static final String TXT_Message = "TextMessage";
    public static final String IMAGE_RESOURCE = "imageResource";

    //  private fields
    private String txtMessage;
    private int imageResource;

    //  getters and setters
    public String gettxtMessage() {
        return txtMessage;
    }

    public void settxtMessage(String txtMessage) {
        this.txtMessage = txtMessage;
    }

    public int getImageResource() {
        return imageResource;
    }

    public void setImageResource(int imageResource) {
        this.imageResource = imageResource;
    }

    //  Used when creating the data object
    public Instructure_setting(String msg, int imageResource) {
        this.txtMessage = msg;
        this.imageResource = imageResource;
    }

    //  Create from a bundle
    public Instructure_setting(Bundle b) {
        if (b != null) {
            this.txtMessage = b.getString(TXT_Message);
            this.imageResource = b.getInt(IMAGE_RESOURCE);
        }
    }

    //  Package data for transfer between activities
    public Bundle toBundle() {
        Bundle b = new Bundle();
        b.putString(TXT_Message, this.txtMessage);
        b.putInt(IMAGE_RESOURCE, this.imageResource);
        return b;
    }

    //  Output txtMessage data
    @Override
    public String toString() {
        return txtMessage;
    }
}

这是我的listview_setting_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="10dp">

    <ImageView
        android:id="@+id/img_message"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_margin="10dp"
        android:contentDescription="placeholder" />

    <TextView
        android:id="@+id/txt_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/img_message"
        android:text="placeholder"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

注意:我使用的是appcompat_v7

1 个答案:

答案 0 :(得分:1)

使用ListFragment或ListActivity时,xml中的ListView id必须为:

android:id="@id/android:list

在xml:

中更改ListView ID
<ListView
        android:id="@id/android:list"

而不是

<ListView
        android:id="@+id/lstview_Setting_fragment"

注意:尝试在片段中的onCreateView()而不是onCreate()中设置列表适配器。