4

多くの人がこれについて質問していることは知っていますが、私の質問には違いがあります。

すでにxmlに(タブを使用して)レイアウトがありますが、文字列の読み取りに従ってボタンを作成する必要があります。

例:クエリは4つの単語を返します。4つのボタンを作成する必要があります。ボタンをクリックすると、その単語のトーストが表示されます。

注意:いくつの単語が見つかるかわかりません。

コードは次のようになります。

    while (Content.indexOf("<glossary>") != -1) {
        Content = Content.substring(Content.indexOf("<glossary>") + 9);
        //create button with name "Content"
    }

編集:

ボタンを1つだけ作成するための新しいコードを見てください。

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showphyto);
    intent = getIntent();
    Title = intent.getStringExtra("Title");
    Content = intent.getStringExtra("Content");
    setTitle(Title);
    //if(getIntent().getData().getQueryParameter("author") != null)
    TabSpec descritor;

    /************************** Tab General **************************/
    descritor = getTabHost().newTabSpec("tag1");
    descritor.setContent(R.id.General);

    Button myButton = new Button(ShowAllegationActivity.this);
    myButton.setText("test");
    LinearLayout myContainer = (LinearLayout) findViewById(R.id.General);
    myContainer.addView(myButton);

    descritor.setIndicator("General", getResources().getDrawable(R.drawable.icon));
    getTabHost().addTab(descritor);

    /************************** Tab 2 **************************/
    descritor = getTabHost().newTabSpec("tag2");
    descritor.setContent(R.id.Recipe);
    Teste = (TextView) findViewById(R.id.teste2);
    Teste.setText("Teste2");
    descritor.setIndicator("Tab2", getResources().getDrawable(R.drawable.icon));
    getTabHost().addTab(descritor);

    /************************** Tab3 3 **************************/
    descritor = getTabHost().newTabSpec("tag3");
    descritor.setContent(R.id.Related);
    Teste = (TextView) findViewById(R.id.teste3);
    Teste.setText("Teste3");
    descritor.setIndicator("Tab3", getResources().getDrawable(R.drawable.icon));
    getTabHost().addTab(descritor);

    getTabHost().setCurrentTab(0);

}

}

xmlファイル:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TabHost android:id="@android:id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
    <LinearLayout android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical">
        <TabWidget android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@android:id/tabs"></TabWidget>
        <FrameLayout android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:id="@android:id/tabcontent">
            <LinearLayout android:layout_width="fill_parent" 
            android:layout_height="fill_parent" 
            android:id="@+id/General">
                    <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content" 
                    android:id="@+id/teste" />
                    <LinearLayout android:layout_width="fill_parent" 
                    android:layout_height="fill_parent" 
                    android:id="@+id/General2">
                    </LinearLayout>
            </LinearLayout>
            <LinearLayout android:layout_width="fill_parent" 
            android:layout_height="fill_parent" 
            android:id="@+id/Recipe">
                    <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content" 
                    android:id="@+id/teste2" />
            </LinearLayout>
            <LinearLayout android:layout_width="fill_parent" 
            android:layout_height="fill_parent" 
            android:id="@+id/Related">
                    <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content" 
                    android:id="@+id/teste3" />
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>

4

5 に答える 5

4

次のコードでボタンを作成できます。

Button myButton = new Button();
myButton.setLayoutParams(myLayoutParams);
myButton.setText(myText);

トーストを表示するには、onClickListenerを追加します。

myButton.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View view)
                    {
                        //The parameter view is the button that was clicked 
                        Toast.makeText(context, ((Button) view).getText(), Toast.LENGTH_LONG).show()
                        //TypeCasting to Button is important, because a normal View doesn't have a getText method
                    }
                });

次に、それらを画面に追加するには、それらを保持するためのxmlで定義されたコンテナー(LinearLayoutなど)が必要です。次のコマンドでLinearLayoutを取得します。

LinearLayout myContainer = findViewById(R.id.myButtonId); //Make sure you set the android:id attribute in xml

おそらく、このコードをループの外側、おそらくその直前に配置する必要があるため、各反復でレイアウトを取得することはありません。

次に、ループ内で、ボタンを設定した後、次のようにします。

myContainer.addView(myButton);

myLayoutParams最後に、変数についてのメモ。ビューのパラメーターを設定するとき、それらはウィジェットの親ビューに対応している必要があります。したがって、ボタンをLinearLayoutに配置すると、次のようになります。

//This will make LayoutParameters with layout_width="wrap_content" and layout_height="fill_parent"
LinearLayout.LayoutParams myLayoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.FILL_PARENT);

これをループの外に置いて、ボタンごとに再利用することもできます。

于 2012-05-11T19:58:13.877 に答える
2

あなたができることは次のようなものです:

    Button button = new Button(this);
    ViewGroup viewGroup = (ViewGroup) findViewById(R.id.container);

    viewGroup.addView(button);

私はあなたのレイアウトを知らないので、もっと具体的にすることはできません。

ViewGroupがレイアウトになり、findByViewIdによって検出されるIDが必要です。

さらに、必要に応じてボタンを配置する必要があります。

于 2012-05-11T19:49:51.260 に答える
1
 while (Content.indexOf("<glossary>") != -1) {
    Content = Content.substring(Content.indexOf("<glossary>") + 9);
    //create button with name "Content"
    Button b = new Button(this);
    b.setText(Content);
    // add this new view to your parent layout
    parent.addView(b);

}
于 2012-05-11T19:42:21.087 に答える
1

タブの作成方法を変更しましたが、うまくいきました。

于 2012-05-17T12:49:58.580 に答える
1

追加したボタンを保持するために、XMLにレイアウトを含める必要があります(動的に行うこともできますが、必要ではないようです)。ボタンを追加する場合は、そのレイアウトを見つけます。次に、ViewGroup.addView(View child)を使用して、ボタンをビュー階層に追加できます。

また、レイアウトが変更されたことをシステムに通知する必要があります。これは、View.invalidate()メソッドを使用して行うことができます。

于 2012-05-11T19:48:44.497 に答える