0

このレイアウトを作成しました:

<!-- create_structure.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ly_create_structure"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>

そしてこの他

<!-- add_level_in_structure.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ly_level"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txt_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1#" 
        android:layout_weight="1"/>

    <EditText
        android:id="@+id/edit_sb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number" 
        android:layout_weight="3">
        <requestFocus />
    </EditText>

    <ImageButton
        android:id="@+id/add_level"
        android:scaleType="fitXY" 
        android:layout_width="48dip"
        android:layout_height="48dip"
        android:cropToPadding="false"
        android:paddingLeft="10dp"
        android:src="@drawable/ic_menu_add" />
 </LinearLayout>

alertDialog で「レベルを追加」をクリックした後、LinearLayout.ly_create_structure に LinearLayout.ly_level をプログラムで追加したい (LinearLayout.ly_level の各レベルには、alertDialog を表示するためのリンクがあります)。

コードは次のとおりです。

public class CreateStructureActivity extends Activity {

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

        addLevel();
    }


    private void addLevel() {
        LinearLayout mainActivityLayout = (LinearLayout)findViewById(R.id.ly_create_structure);
        LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LinearLayout ly = (LinearLayout) li.inflate(R.create_structure, null);

        ImageButton ib = (ImageButton) ly.findViewById(R.id.add_level);        

        ib.setOnClickListener( new View.OnClickListener() {         
            @Override
            public void onClick(View v) {
                showDialog();

            }
        });

        mainActivityLayout.addView(ly);
    }



    private void showDialog() {
        final CharSequence[] items = {"Add Level", "Delete"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Actions");

        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {

                switch(item){
                    case 0:
                        addLivello();
                    break;

                    case 1:
                        delete();
                    break;
             }
                }
            });

        AlertDialog alert = builder.create();
        alert.show();
    }    
}

このコードを使用すると、LinearLayout を最後に追加できますが、AlertDialog を表示するためにクリックされたボタンを含む LinearLayout の後に追加したいと考えています。これを実装するのを手伝ってもらえますか?

更新 1: インデックスの取得方法がわかりません。私はこのようにしようとしています:

private void addLevel() {
        LinearLayout mainActivityLayout = (LinearLayout)findViewById(R.id.ly_create_structure);
        LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LinearLayout ly = (LinearLayout) li.inflate(R.create_structure, null);

        ImageButton ib = (ImageButton) ly.findViewById(R.id.add_level);        

       /**
         * New code to get index
         */
        ViewGroup vg = (ViewGroup) ib.getParent();
        int index = mainActivityLayout.indexOfChild(vg);


        ib.setOnClickListener( new View.OnClickListener() {         
            @Override
            public void onClick(View v) {
                showDialog();

            }
        });

        mainActivityLayout.addView(ly, index);
    }

更新 2: 問題を解決しました。以下のコードを showDialog() に移動します

ViewGroup vg = (ViewGroup) ib.getParent();
int index = mainActivityLayout.indexOfChild(vg);
4

2 に答える 2

0

まず、ビュー オブジェクトを取得し、現在のコードで行っているように linearlayout オブジェクトを作成し、viewObject.addView("linearlayout object"); を追加します。私は、これはあなたに完全な助けだと思います..

于 2012-02-17T12:00:08.080 に答える
0

Dev Androidでメソッドを使用できます

パラメータでビューのインデックスも取ります。

private void addLevel(int index) {
        LinearLayout mainActivityLayout = (LinearLayout)findViewById(R.id.ly_create_structure);
        LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LinearLayout ly = (LinearLayout) li.inflate(R.create_structure, null);

        ImageButton ib = (ImageButton) ly.findViewById(R.id.add_level);        

        ib.setOnClickListener( new View.OnClickListener() {         
            @Override
            public void onClick(View v) {
                showDialog();

            }
        });

        mainActivityLayout.addView(ly, index);
    }
于 2012-02-17T11:53:24.980 に答える