-7

現在のアクティビティから新しいアクティビティに int 値を送信しようとしました。これが現在のアクティビティのパーツです。

            dialog.setPositiveButton("4 players", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "Start a new game!", Toast.LENGTH_SHORT).show();
                    // need send extra value to PlayerBoardActivity to decide how many buttons I should have
                    Intent intent = new Intent(MainActivity.this,
                            PlayBoardActivity.class);
                    intent.putExtra(PLAYER_NO, 4);
                    startActivity(intent);
                }

            });
            dialog.setNegativeButton("2 players", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "Start a new game!", Toast.LENGTH_SHORT).show();
                    // need send extra value to PlayerBoardActivity to decide how many buttons I should have
                    Intent intent = new Intent(MainActivity.this,
                            PlayBoardActivity.class);
                    intent.putExtra(PLAYER_NO, 2);
                    startActivity(intent);
                }

            });

問題は、新しいアクティビティ用に 2 つのレイアウト ファイルを作成することです。たとえば、ダイアログで否定ボタンを押すと、新しいアクティビティ (私の場合は PlayerBoardActivity) に、「intent.putExtra(PLAYER_NO, 2);」で送信した値に対応するレイアウト ファイルをロードさせます。

新しいアクティビティのコードは

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final String PLAYER_NO = "the number of players";
    Bundle b = getIntent().getExtras();
    int a = b.getInt(PLAYER_NO);
    if (b != null) {
        if (a == 2) {
            setContentView(R.layout.two_player);
        }
        if(a == 4){
            setContentView(R.layout.four_player);
        }
    }
}

この方法で別のレイアウト ファイルをロードできるかどうか知りたいですか? または、私の問題に対するより良い解決策がありますか。

よろしくお願いします。

4

5 に答える 5

1

使用する場合

intent.putExtra(PLAYER_NO, 2);

値を取得するには、次のコードを呼び出す必要があります (「バンドル」を使用せずに)。

getIntent().getIntExtra(PLAYER_NO, -1)
于 2015-09-29T06:25:20.163 に答える
1

あなたのコードでは、呼び出している 2 番目のアクティビティに問題があります。インテントから間違った方法で値を取得しようとしています。2 番目のアクティビティでこれを試してください。

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   Intent intent = getIntent();
   int b = intent.getIntExtra(PLAYER_NO, 0);
        if (b == 2) {
            setContentView(R.layout.two_player);
        } 
        if(b == 4){
            setContentView(R.layout.four_player);
        } 
} 
于 2015-09-29T06:25:51.133 に答える
0

あなたは非常に間違ったやり方をしています。これにはフラグメントを使用する必要があります。異なるレイアウトをインフレートできる 2 つのフラグメントを作成する必要があります。しかし、これはあなたの呼びかけです。

PlayBoardActivity から次のようなデータを送信しています。

intent.putExtra(PLAYER_NO, 4);

したがって、新しいアクティビティでは、次のように取得する必要があります。

int b=getIntent.getIntExtra(PLAYER_NO,defaulValue);

バンドルから値を取得しようとしていますが、これは間違っています。

于 2015-09-29T10:03:55.400 に答える
0

これを試して、

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final String PLAYER_NO = "the number of players";
    Intent b = getIntent();
    int a = b.getExtras().getInt(PLAYER_NO);

    if (b != null) {
        if (a == 2) {
            setContentView(R.layout.two_player);
        }
        if(a == 4){
            setContentView(R.layout.four_player);
        }
    }
}
于 2015-09-29T06:57:17.717 に答える
0

ジヤン...それは問題ありません..レイアウトコンテンツが同じ種類の構造であり、同じアクティビティ内の任意のレイアウトの異なるリソースを扱うことがそれほど難しくない場合..

レイアウト two_player.xml が

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:orientation="vertical">

<TextView
    android:id="@+id/textview1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#777370"
    android:textSize="16sp"
    android:paddingLeft="5dp"
    android:text="Dummy Text"
    android:visibility="gone"
    android:textStyle="bold"/>
</RelativeLayout>

そしてレイアウト four_player.xml はそのようなものです

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:orientation="vertical">

<ImageView
    android:id="@+id/iv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/order_content"
    android:src="@drawable/order_next_sap"
    android:layout_alignLeft="@+id/order_content"/>
<ImageView
    android:id="@+id/iv2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/order_content"
    android:src="@drawable/order_next_sap"
    android:layout_alignLeft="@+id/order_content"/>
</RelativeLayout>

...異なる定義の両方のレイアウトを意味します..同じアクティビティで両方のレイアウトのリソースを使用するのが難しく、あまり良くありません..

この場合のより良い解決策は、両方のレイアウトのフラグメントを作成することです

class TwoPlayerFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup   container,
            Bundle savedInstanceState) {
        View v=inflater.inflate(R.layout.two_player, container, false);
        return v;
    }
}

class FourPlayerFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup   container,
            Bundle savedInstanceState) {
        View v=inflater.inflate(R.layout.four_player, container, false);
        return v;
    }
}

ダイアログから渡されたインテント値に従ってフラグメントを使用します。

于 2015-09-29T06:26:38.980 に答える