0

私は最近、Android での開発を開始しましたが、まだいくつかの概念について理解しようとしています。

私は電話スタイルのキーパッドのレイアウトに取り組んできましたが、ほとんどが機能し、希望どおりに見えるようになりました。

ここに画像の説明を入力

次のステップは、ここに表示されているものをすべてタブにまとめて、複数のアクティビティを切り替えることができるようにすることでした。

には次の XML を使用しましたTabHost

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1" />
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="70.0dp"
            android:layout_weight="0" />
    </LinearLayout>
</TabHost>

TabActivityタブ ロジックを管理するには、次のようにします。

[Activity(MainLauncher = true, Label = "@string/app_name", Theme = "@android:style/Theme.NoTitleBar")]
public class TabContainer : TabActivity
{

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.TabContainerLayout);

        TabHost.TabSpec spec;     // Resusable TabSpec for each tab
        Intent intent;            // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent(this, typeof(KeypadActivity));
        intent.AddFlags(ActivityFlags.NewTask);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = TabHost.NewTabSpec("keypad");
        spec.SetIndicator("Keypad", Resources.GetDrawable(Resource.Drawable.keypad_light));
        spec.SetContent(intent);
        TabHost.AddTab(spec);

        // Do the same for the other tabs
        intent = new Intent(this, typeof(LogsActivity));
        intent.AddFlags(ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec("logs");
        spec.SetIndicator("Logs", Resources.GetDrawable(Resource.Drawable.logs_light));
        spec.SetContent(intent);
        TabHost.AddTab(spec);

        intent = new Intent(this, typeof(UnsetActivity));
        intent.AddFlags(ActivityFlags.NewTask);

        spec = TabHost.NewTabSpec("unset");
        spec.SetIndicator("Unset", Resources.GetDrawable(Resource.Drawable.unset_light));
        spec.SetContent(intent);
        TabHost.AddTab(spec);

        TabHost.CurrentTab = 0;
    }

}

タブは正しく動作しますが、以前のキーパッドの機能とスタイルは失われ、すべて次のように表示されます。

ここに画像の説明を入力

既存のKeypadActivityものを に挿入するとTabHost、機能とスタイルが失われるのはなぜですか? どうすれば内部でそれを維持できTabHostますか?

4

1 に答える 1

0

サービスが機能していないという問題は、

public void OnServiceConnected(ComponentName name, IBinder service){}

呼び出されることはありません。これは、サーバー内でサービスを開始しようとした場合の既知の問題です。TabActivity

これを修正するには、メソッドはアプリケーション コンテキストでメソッドOnStart()を明示的に呼び出す必要があります。BindService()

    protected override void OnStart ()
    {
        base.OnStart ();

        var intentFilter = new IntentFilter (ServiceClass.UpdatedAction){Priority = (int)IntentFilterPriority.HighPriority};
        RegisterReceiver (_receiver, intentFilter);

        _serviceConnection = new ServiceConnection (this);

        Application.Context.BindService(_intent, _serviceConnection, Bind.AutoCreate);
        // instead of
        // BindService(_intent, _serviceConnection, Bind.AutoCreate);


        StartService(_intent);
    }

スタイルについては、ボタンに特定のスタイルを指定し、それをそれぞれに適用する必要がありました。

于 2013-06-07T09:33:02.980 に答える