我尝试将当前活动的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);”< / p>
新活动中的代码是
@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);
}
}
}
我想知道我是否可以这种方式加载不同的布局文件?或者是否有更好的解决方案来解决我的问题。
提前谢谢大家。
答案 0 :(得分:1)
如果您使用
intent.putExtra(PLAYER_NO, 2);
你应该调用以下代码来获取值(不使用“Bundle”):
getIntent().getIntExtra(PLAYER_NO, -1)
答案 1 :(得分: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);
}
}
答案 2 :(得分: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;
}
}
并根据意图值从对话框传递使用片段。
答案 3 :(得分:0)
试试这个,
<a href='@Url.Action("action", "controller")'>
答案 4 :(得分:0)
你做得非常错误。你应该使用片段。您应该创建两个片段,您可以在其中扩展不同的不同布局。但这是你的电话。
从PlayBoardActivity发送数据,如:
intent.putExtra(PLAYER_NO, 4);
因此,在新活动中,您需要像以下一样进行检索:
int b=getIntent.getIntExtra(PLAYER_NO,defaulValue);
你试图从捆绑中获取错误的价值。