1

I don't get my fragment to work... :-(

My Activity:

public class Test extends SherlockActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setTitle(R.string.title);
//      actionBar.setDisplayShowTitleEnabled(false);
//

    actionBar.setDisplayShowHomeEnabled(false);



    Tab tab = actionBar.newTab().setText(dayName(Calendar.MONDAY))
            .setTabListener(new WeekDayTabListener(getApplicationContext()));
    actionBar.addTab(tab);

    ...

    tab = actionBar.newTab().setText(dayName(Calendar.SUNDAY))
            .setTabListener(new WeekDayTabListener(getApplicationContext()));
    actionBar.addTab(tab);
}



public static class WeekDayTabListener implements TabListener {

    private Context context;

    public WeekDayTabListener(Context context) {
        this.context = context;
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Tools.longToast(tab.getText().toString(), this.context);
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

}

}

my 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="match_parent"
    android:orientation="vertical" >

   <fragment
        android:id="@+id/weekDayFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?android:attr/actionBarSize"
        class="com.test.fragment.DayFragment" >
    </fragment>

</LinearLayout>

and finally my Fragment:

import com.actionbarsherlock.app.SherlockFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DayFragment extends SherlockFragment { 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        Context c = getActivity().getApplicationContext();
        LinearLayout l = new LinearLayout(c);
        TextView tv = new TextView(c);
        tv.setText("foo");
        l.addView(tv);

        return l;
    }
}

If I execute, I get the following exception:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.fragment/com.test.fragment.Test}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

So if i comment out the parte there is no error - but the path is correct, so what am i doing wrong?

4

4 に答える 4

7

クラスTestは拡張する必要はSherlockFragmentActivityありませんSherlockActivity

class Test extends SherlockFragmentActivity{
    ...    
}
于 2012-07-26T03:45:49.287 に答える
1

フラグメントonCreateView()メソッドでは、レイアウトを膨らませる必要があります。

例えば

.....
myInflater = inflater;
TextView tv;
tv = inflater.inflate(R.layout.your_fragment_layout_here);
.....

ここから、線形レイアウトをビューに追加できます。

これは単なる擬似コードであり、動作させるには構文をいじる必要があることに注意してください。

于 2012-04-12T10:02:09.087 に答える
0

xmlandroid:name="com.test.fragment.DayFragment"の代わりに試してください。class="com.test.fragment.DayFragment"

于 2012-04-12T10:02:50.580 に答える
-1

ああ...

私の(パッケージ)名前を何にでも変更しようとして3時間無駄にした後、ソリューションを何度も読んで初心者のチュートリアルを読んでさまざまなビューを膨らませることはとても簡単でした:

android: layout_marginTop = "?android:attr/actionBarSize"を削除することで仕事ができました...

于 2012-04-12T17:27:10.500 に答える