Listfragment вылетает довольно простое приложение каждый раз - PullRequest
0 голосов
/ 29 августа 2011

В настоящее время я пытаюсь работать с Android ActionBar Sherlock на моем Nexus One под управлением Gingerbread 2.3.4. Я пытаюсь разработать FragmentList, который позволяет мне создавать меню в этом упражнении. Меню теперь должно состоять из "item1 - item4". Однако, позже я хочу, чтобы меню состояло из пользовательского списка.

Однако, когда я пытаюсь запустить свое приложение, оно по той или иной причине принудительно закрывается.

Это файл макета:

<?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="fill_parent"
android:orientation="vertical"
android:paddingLeft="0dip"
android:background="@drawable/bg">
<TextView 
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hauptmenü"
android:background="@drawable/custom_bg_title"
android:padding="5dip"
android:gravity="center"
android:textStyle="bold"
android:height="30px"
 />

<fragment class="com.w..TitlesFragment"
        android:id="@+id/titles" android:layout_weight="1"
        android:layout_width="0px"
        android:layout_height="match_parent" />


</LinearLayout>

Это кодовый файл действия

package com.;

import android.app.ListFragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import android.support.v4.view.Menu;
import android.support.v4.view.MenuItem;
import android.support.v4.view.SubMenu;
import android.support.v4.view.Window;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class wcw_realActivity extends FragmentActivity implements OnItemClickListener {


private static final String[] items ={"item1","item2","item3","item4"};
@Override
public boolean onCreateOptionsMenu(Menu menu) {

    SubMenu subMenu1 = menu.addSubMenu("Action Item");
        subMenu1.add("Sample");
        subMenu1.add("Menu");
        subMenu1.add("Items");

    MenuItem subMenu1Item = subMenu1.getItem();
        subMenu1Item.setIcon(R.drawable.ic_title_share_default);
        subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);          

    return super.onCreateOptionsMenu(menu);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_ACTION_BAR);        
    setContentView(R.layout.main);                       
}   

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Log.i("FragmentList", "Item clicked: "+ id);
}

public static class TitlesFragment extends ListFragment {
    boolean mDualPane;
    int mCurCheckPosition = 0;

    @Override
    public void onActivityCreated(Bundle savedState) {
        super.onActivityCreated(savedState);

        // Populate list with our static array of titles.
        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1,
                items));

        if (savedState != null) {
            // Restore last state for checked position.
            mCurCheckPosition = savedState.getInt("curChoice", 0);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", mCurCheckPosition);
    }

    @Override
    public void onListItemClick(ListView l, View v, int pos, long id) {
        Log.i("FragmentList", "Item clicked: "+ id);
    }

}

}

Я подозреваю, что неправильно инициализировал фрагмент, что, вероятно, объясняет, что приложение каждый раз вылетает.

Когда я исключаю тег "фрагмент" из моего приложения, он работает просто отлично.

Было бы замечательно, если бы кто-то знал решение этой конкретной проблемы.

Вот лог-файл

1 Ответ

0 голосов
/ 29 августа 2011

ListFragment (или любой другой Fragment) по умолчанию недоступен в Gingerbread. Вы можете компилировать против Honeycomb, поэтому он компилируется, но вылетает при запуске. Используйте пакет совместимости для использования фрагментов в более старых версиях Android. Кроме того, убедитесь, что ваш minSdkVersion установлен на правильный.

Если вы уже используете пакет совместимости, возможно, вы не включаете его правильно (поскольку класс ListFragment не может быть найден)?

...