#android #android-intent
#Android #android-намерение
Вопрос:
Я пытаюсь создать намерение, которое связывает кнопку с классом (определение намерения). Проблема в том, что, когда я нажимаю эту кнопку, все происходит сбой. Я думаю, что проблема в классе intent. Вы видите, что не так? Я пытаюсь открыть диалоговое окно с предупреждением при нажатии кнопки bet. Я уже создал его:
Класс чипов, класс, который ИИ хочет использовать после нажатия кнопки:
public class Chips extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
}
private AlertDialog.Builder dialog;
public void scommessa () {
dialog = new AlertDialog.Builder(this);
final EditText txtInput = new EditText (this);
final String stringInput = txtInput.getText().toString();
dialog.setTitle("Welcome to poker");
dialog.setMessage("Player 2, place your bet!");
dialog.setView(txtInput);
dialog.setPositiveButton("Bet", new Dialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
int bet1 = 100;
int intInput = Integer.parseInt(stringInput);
int newPlayer1Bet = bet1 - intInput;
String total1 = "" newPlayer1Bet;
}
});
dialog.setNegativeButton("Pass", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which){
Toast.makeText(getApplicationContext(), "Player 2 won", Toast.LENGTH_SHORT).show();;
}
});
AlertDialog dialogPoker = dialog.create();
dialogPoker.show();
}
public void onClick(View v){
switch (v.getId()){
case R.id.Cover1:
scommessa();
break;
}
}
}
Тогда вот класс, в котором я определил кнопку, а затем попытался вызвать класс Chips:
final Button Cover1 = (Button) findViewById(R.id.Cover1);
final Button button1 = (Button) findViewById(R.id.A);
final Button button2 = (Button) findViewById(R.id.B);
final Button button3 = (Button) findViewById(R.id.C);
final Button button4 = (Button) findViewById(R.id.D);
final Button button5 = (Button) findViewById(R.id.E);
final Button Bet = (Button) findViewById(R.id.button1);
Cover1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
if(v.equals(Cover1)){
button1.setBackgroundResource(R.drawable.back);
button2.setBackgroundResource(R.drawable.back);
button3.setBackgroundResource(R.drawable.back);
button4.setBackgroundResource(R.drawable.back);
button5.setBackgroundResource(R.drawable.back);
}
}
});
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View x){
if(x.equals(Bet)){
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
Chips chip = new Chips();
chip.scommessa();
}
Intent intent1 = new Intent(GameActivity.this, Chips.class);
//startActivity(intent1);
Chips chip = new Chips();
chip.scommessa();
}
});
Вот манифест:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pokeroriginal"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.pokeroriginal.FullscreenActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="GameActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.pokeroriginal.GameActivity"
android:label="@string/title_activity_game"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar">
</activity>
<activity
android:name= "com.example.pokeroriginal.Chips"
android:label= "@string/Bet"
android:screenOrientation= "landscape"
android:theme= "@android:style/Theme.NoTitleBar">
</activity>
</application>
</manifest>
Также activity_game.xml где определены все кнопки:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/green_table_cloth"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".GameActivity" >
<LinearLayout
android:id="@ id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal" >
<Button
android:id="@ id/Cover1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cover"
android:onClick="onClickChips" />
<Button
android:id="@ id/A"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:onClick="onClick"
android:background="@drawable/back"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<Button
android:id="@ id/B"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:background="@drawable/back"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<Button
android:id="@ id/C"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:background="@drawable/back"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<Button
android:id="@ id/D"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:background="@drawable/back"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<Button
android:id="@ id/E"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="40dp"
android:onClick="onClick"
android:background="@drawable/back"
/>
<View
android:layout_width="0dp"
android:layout_height="0dp" >
</View>
</LinearLayout>
<ImageSwitcher
android:id="@ id/imageSwitcher1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@ id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick(View x)"
android:text="@string/Bet" />
<Button
android:id="@ id/Button01"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Bet" />
</ImageSwitcher>
<LinearLayout
android:id="@ id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:orientation="horizontal" >
<Button
android:id="@ id/Cover2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cover" />
<Button
android:id="@ id/A2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:background="@drawable/back2" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<Button
android:id="@ id/B2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/back2" />
<View
android:layout_width="0dp"
android:layout_height="10dp"
android:layout_weight="1" />
<Button
android:id="@ id/C2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/back2" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<Button
android:id="@ id/D2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/back2" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<Button
android:id="@ id/E2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@drawable/back2" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<!-- <ImageView
android:id="@ id/Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView> '
-->
</LinearLayout>
<Button
android:id="@ id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Bet" />
</LinearLayout>
Комментарии:
1. Можете ли вы опубликовать свой журнал ошибок и манифест тоже?
2. Да, конечно, посмотрите обновление через 30 секунд
3. Ошибка в основном заключается в сбое всего приложения, когда я нажимаю кнопку Bet
Ответ №1:
Трудно определить, что это за ошибка, не видя logcat — вам действительно следует включить ее в будущем.
Глядя на ваш код, я замечаю это в button1 OnClickListener:
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
Chips chip = new Chips();
chip.scommessa();
Чтобы начать другое действие, все, что вам нужно сделать, это:
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
Я считаю, что попытка создать экземпляр Activity с помощью его конструктора вызывает проблемы. Когда вы делаете это, представления активности не были настроены должным образом, и при попытке отобразить диалоговое окно вы столкнетесь с ошибками.
Попробуйте удалить эти строки:
Chips chip = new Chips();
chip.scommessa();
Ваш OnClickListener должен выглядеть следующим образом:
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View x) {
if (x.equals(Bet)) {
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
}
}
});
Ответ №2:
Я думаю, что здесь вы получаете исключение NullPointerException.
if(x.equals(Bet))
и ваш xml onClick() реализован неправильно.
<Button
android:id="@ id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick(View x)"
android:text="@string/Bet" />
код Java должен быть таким,
final Button Cover1 = (Button) findViewById(R.id.Cover1);
final Button button1 = (Button) findViewById(R.id.A);
final Button button2 = (Button) findViewById(R.id.B);
final Button button3 = (Button) findViewById(R.id.C);
final Button button4 = (Button) findViewById(R.id.D);
final Button button5 = (Button) findViewById(R.id.E);
final Button Bet = (Button) findViewById(R.id.button1);
Cover1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
button1.setBackgroundResource(R.drawable.back);
button2.setBackgroundResource(R.drawable.back);
button3.setBackgroundResource(R.drawable.back);
button4.setBackgroundResource(R.drawable.back);
button5.setBackgroundResource(R.drawable.back);
}
});
Bet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Chips chip = new Chips();
chip.scommessa();
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
}
});
Или, если вы используете xml, реализация должна быть такой.
<Button
android:id="@ id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="NavigateToChips"
android:text="@string/Bet" />
и вы должны реализовать метод onClick () в действиях, подобных этому,
public void NavigateToChips(View v) {
Chips chip = new Chips();
chip.scommessa();
Intent intent1 = new Intent(GameActivity.this, Chips.class);
startActivity(intent1);
}
Ответ №3:
В вашем файле XML-макета я вижу атрибут android:onClick="onClickChips"
для компонента с идентификатором as android:id="@ id/Cover1"
. Следовательно, код Java обычно ищет метод с именем onClickChips()
, тогда как вы использовали setOnClickListener()
Cover1
кнопку for .
Решение: либо удалите атрибут ( android:onClick="onClickChips"
) из вашего XML, либо удалите setOnClickListener()
для этой кнопки. Сохраняйте только один.