-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);

您应该调用以下代码来获取值(不使用“Bundle”):

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

在您的代码中,问题出在您要调用的第二个活动中。您试图以不正确的方式从意图中获取值。在你的第二个活动中试试这个:

@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

尝试这个,

@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

吉阳……没关系……如果布局内容相同的结构,在同一个activity中处理任何布局的不同资源,就没有那么难了。。

假设布局 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 回答
0

你的做法非常错误。您应该为此使用片段。您应该创建两个片段,您可以在其中膨胀不同的不同布局。但这是你的电话。

从 PlayBoardActivity 您发送的数据如下:

intent.putExtra(PLAYER_NO, 4);

因此,在新活动中,您需要像这样检索:

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

您正在尝试从错误的捆绑包中获取价值。

于 2015-09-29T10:03:55.400 回答