0

私はAndroid開発に不慣れです。

いくつかのGUI要素を追加したいアクティビティがあります。

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dial_details);
    if (android.os.Build.VERSION.SDK_INT >= 11)
        // Show the Up button in the action bar.
        getActionBar().setDisplayHomeAsUpEnabled(true);

    inflateNewRow();
    inflateNewRow();
}

private void inflateNewRow()
{
    LinearLayout thisLayout = (LinearLayout) findViewById(R.id.dial_details_layout);
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // Before edit!
    //inflater.inflate(R.layout.dialitem_details, thisLayout);
            // After edit, which works!
            inflater.inflate(R.layout.dialitem_details, null);
            thisLayout.addView(ll);
}

inflateNewRowを最初に呼び出すと、行が追加されます。2回目の呼び出しは、何もしないようです。例外はなく、行は追加されません。

念のため、setVisibility呼び出しを追加しました。違いはありません。

inflateNewRowを2回呼び出すのは奇妙に思えるかもしれませんが、実際にはこの例のためだけです。onCreateで一度呼び出され、次にメニューのクリックイベントから呼び出されます。ただし、この簡単な例では問題が再現されます。

これは、追加される小さなビューです。

<?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="horizontal" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:ems="10"
    android:inputType="number" >

    <requestFocus />
</EditText>

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

これに:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dial_details_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DialDetailsActivity" >

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="CheckBox" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="number" >

    <requestFocus />
</EditText>

</LinearLayout>

最初の行だけが表示される/追加される理由はありますか?

4

1 に答える 1

0

この関数を一度呼び出すと LinearLayout ll が一度作成されますが、再度呼び出すと既に存在していますね。したがって、llを作成せずに書くだけの場合

inflater.inflate(R.layout.dialitem_details, thisLayout);

それ以外の

LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.dialitem_details, thisLayout);

望ましい結果が得られるはずです

アイテムごとに可視性を true に設定する必要はありません

于 2013-02-10T17:20:54.603 に答える