0

私はその点でAndroidとJavaにかなり慣れていないので、コンテキストの問題を抱えています-別のTabWidget内のTabWidget内にSpinnerがあり、コード側にはTabActivityであるメインクラスがあり、そこで設定します特定のタブのインテントを別の TabActivity に設定します。ここで、タブのインテントをアクティビティに設定し、コンテンツ ビューをスピナーがあるレイアウトに設定します (うまくいけば、それは理にかなっています)。スピナーをクリックして、スピナーのダイアログを起動しようとすると、不正なトークン エラーが発生します。私が読んだことによると、スピナーのコンテキストが間違っているためですが、コンテキストを積極的に設定していないため (XML でスピナーを作成しました)、設定するメソッドまたは公開されたプロパティが見つからないようです。スピナーのコンテキスト...まあ、要点はわかります。他の人の同様の問題を読んだにもかかわらず、これで迷子になりました。これが私のコードです:

主要:

public class Star_Android_Activity extends TabActivity 
{
    public static void main(String[] args) {
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();  // The activity TabHost
        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().setClass(this, Pick_Activity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("pick").setIndicator(LinearLayout.inflate(this,R.layout.tab_header_pick, null))
            .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
    }
}

サブタブ:

public class Pick_Activity extends TabActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

            setContentView(R.layout.pick);

            TabHost tabHost = getTabHost();  // The activity TabHost
            TabHost.TabSpec spec;  // Reusable TabSpec for each tab
            Intent intent;  // Reusable Intent for each tab

            intent = new Intent().setClass(this, Pending_Activity.class);
            spec = tabHost.newTabSpec("pending").setIndicator(LinearLayout.inflate(this,R.layout.tab_header_pending, null))
                          .setContent(intent);
            tabHost.addTab(spec);

            tabHost.setCurrentTab(0);
    }
}

子供の活動:

public class Pending_Activity extends Activity 
{

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pending);

        addSpinnerValues();
    }

    public void addSpinnerValues()
    {
        Spinner spn = (Spinner)findViewById(R.id.spnPick);
        List<String> list = new ArrayList<String>();
        list.add("list 1");
        list.add("list 2");
        list.add("list 3");
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spn.setAdapter(dataAdapter);    
    }

}

Main と Pick の xml ファイルは、基本的に hello tabwidget チュートリアルのコピーであり、私の pending.xml は、いくつかのボタンと私のスピナーを含む単なる FrameLayout です。役立つ場合はコードを投稿できますが、コードの投稿に問題がありました (おそらく文字制限)。

私のコンテキストを適切に設定する方法についてのヘルプ(および面倒でなければ簡単な説明)をいただければ幸いです。

4

1 に答える 1

3

しばらく時間がかかりましたが、解決策の一部を含む別の投稿を見つけました。少なくとも私の目的には大いに役立ちました...私は単に変更しました:

setContentView(R.layout.pending); 

に:

View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.pending, null); 
    this.setContentView(viewToLoad); 

私の pending.xml ページのコンテキストが親のコンテキストに設定されるように...告白しますが、なぜそれが親の親である必要がなかったのか、なぜ親だけがそれ自体は子供だったことは許容範囲内です...しばらく時間が経てば、それを理解し始めることができれば幸いです。

于 2012-04-18T12:46:26.243 に答える