2015-09-29 1 views
-7

Я попытался отправить значение int из текущей активности в новую, вот части в текущей деятельности.Как я могу передать некоторое значение между действиями в Android

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

Я хочу знать, могу ли я загрузить другой файл макета таким образом? Или есть лучшее решение для моей проблемы.

Благодарим вас заблаговременно.

+0

И почему бы вам просто не реализовать две разные «Деятельности»? Если у вас два разных макета, вы должны реализовать их в двух разных компонентах. Если вы это сделаете, вам больше не нужно отправлять значение вместе с «Intent», вам просто нужно запустить две разные «Деятельности», на основе которых нажата кнопка «Button». –

+0

Offtopic: вы должны сделать нулевую проверку перед использованием переменной 'b' в' b.getInt'. –

ответ

1

Если вы используете

intent.putExtra(PLAYER_NO, 2); 

вы должны вызвать следующий код, чтобы получить значения (без использования «Bundle»):

getIntent().getIntExtra(PLAYER_NO, -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); 
     } 
} 
+0

Вы должны переименовать переменную 'b' как' a' и удалить нулевую проверку. –

0

Ji Yang ... это fine..if как содержание макета такой же структуры и работы с различными ресурсами любого макета в одной и той же деятельности, не так трудно ..

предположим, что раскладка 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> 

означает ... как расположение различной Defination .. чем его трудно использовать ресурс как расположение в той же самой деятельности и ее не слишком хорошо ..

Лучшее решение в этом случае создать фрагмент как макет

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

и использовать фрагмент, по замыслу перевала значения из диалогового окна ..

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

Вы делаете очень неправильный путь. Вы должны использовать фрагмент для этого. Вы должны создать два фрагмента, в которых вы можете раздувать разные макеты. Но это ваш звонок.

От PlayBoardActivity вы отправляете данные, такие как:

intent.putExtra(PLAYER_NO, 4); 

Таким образом, в новой деятельности необходимо извлечь как:

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

вы пытаетесь получить значение из пучка, который является неправильным.

 Смежные вопросы

  • Нет связанных вопросов^_^