0

条件に基づいてxmlファイルのレイアウトを変更する方法を考えていました。それで、そのようなレイアウトがあるとしましょう。

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"

>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@drawable/app_background"
 android:padding="5dip"
 >

<ListView android:id="@+id/xlist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="#00000000"

            android:divider="@drawable/listdivider"
            android:dividerHeight="19dp"

           />
  <TextView 
              android:layout_width="fill_parent"
              android:background="@drawable/listdivider"
              android:layout_height="19dp"
              android:visibility="gone"
             android:id="@+id/dividerline"
              />
  <ListView android:id="@+id/ylist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="#00000000"
             android:divider="@drawable/listdivider"
            android:dividerHeight="19dp"

           />
</LinearLayout>
</LinearLayout>

したがって、2つの変数をリストビューとして設定すると、xmlに基づいて、「xlist」が「ylist」の前に表示されます。しかし、私のコードでは、特定の条件が満たされた場合に、このビューの順序を切り替えたいと思います。では、特定の条件が満たされた場合に「ylist」が「xlist」の上に表示されるように、順序を切り替えるにはどうすればよいでしょうか。

4

2 に答える 2

3

これを行う簡単な方法は、各ビューを独自のxmlファイルに配置することです。次に、実行時にそれらを希望の順序でlinearLayoutにアタッチします。

レイアウトファイルがmain.xmlであり、list_a.xml、list_b.xml、およびtextview.xmlがあるとします。

あなたの活動で:

@Override

public void onCreate(Bundle bundle) {
 Super.onCreate(bundle);
 setContentView(R.layout.main);
 LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
 LayoutInflater inflater = getLayoutInflater();
 if (condition) {
 inflater.inflate(R.layout.list_a, layout);
 inflater.inflate(R.layout.textview, layout);
 inflater.inflate(R.layout.list_b, layout);


} else { 
     inflater.inflate(R.layout.list_b, layout);
 inflater.inflate(R.layout.textview, layout);
 inflater.inflate(R.layout.list_a, layout);
 }
 }
于 2013-01-23T15:29:51.933 に答える
0

それをしたことはありませんが、これはうまくいくはずです:

public void switchViewOrder(final ViewGroup parent, final int view1Id, final int view2Id) {

    View view1 = null;
    int view1pos = -1;
    View view2 = null;
    int view2pos = -1;

    int count = parent.getChildCount();
    for(int i = 0; i < count; i++) {
        View cur = parent.getChildAt(i);
        if (view1Id == cur.getId()) {
            view1 = cur;
        } else if (view2Id == cur.getId()) {
            view2 = cur;
        }
    }

    parent.removeViewAt(view1pos);
    parent.removeViewAt(view2pos);

    parent.addView(view1, view2pos);
    parent.addView(view2, view1pos);
}

適切なnullなどのチェックを追加するのはあなたに任せます。

于 2013-01-23T15:27:17.977 に答える