[英](Android Studio Java) FAB OnClick Alert Dialog makes app crash
這是activity_main代碼:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:gravity="center"
android:textSize="36sp"
android:textColor="@color/colorPrimary"
android:text="To Do"
android:layout_marginTop="45dp"
android:fontFamily="@font/montserratlight"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_marginTop="126dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp">
</ListView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="50dp"
android:src="@drawable/plussymbol" />
</RelativeLayout>
這是我的 MainActivity Java 代碼:
package com.geoff.productivitywatch;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
int clickCounter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list = (ListView) findViewById(R.id.listView);
final ArrayList<String> todo = new ArrayList<>();
todo.add("Swipe Up");
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.tododesign, todo);
list.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Here is where the pop-up box code goes
final EditText todoEditText = new EditText(getApplicationContext());
AlertDialog dialog = new AlertDialog.Builder(getApplicationContext())
.setTitle("New Task")
.setMessage("What next?")
.setView(todoEditText)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Add Task to listview
String task = String.valueOf(todoEditText.getText());
todo.add("" + task);
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}
});
}
}
我嘗試編寫一種方法,在該方法中,單擊浮動操作按鈕會彈出一個對話框警告框,您可以在其中編輯文本,然后將其添加到列表視圖中。 Android Studio 在我的代碼中沒有看到錯誤,但是當我在我的 android 設備上測試應用程序時,只要單擊浮動操作按鈕,應用程序就會崩潰。 但是,我知道這不是我的設備的問題,因為我之前已經成功對其進行了多次測試,只有在我添加 AlertDialog 方法時它才開始崩潰。 我想我可能在上下文中出錯了,但是我已將它們更改為我能想到的所有變體,但並沒有幫助。
IDK 導致崩潰的實際原因是什么,因為您沒有共享 logcat,但我注意到您嘗試實現的任何目標都是通過 Dialog 而不是通過 AlertDilaog 可能實現的,這是我的解釋:
為對話框創建一個單獨的 .xlm 布局文件。 與您編輯文本和一些確定和取消按鈕。
在 fab create/inflate 的 onClick 內,並顯示對話框
// Create a custom dialog object final Dialog dialog = new Dialog(MainActivity.this); // Include dialog.xml file dialog.setContentView(R.layout.your_dialg_layout); // Set dialog title dialog.setTitle("Custom Dialog"); // set values for custom dialog components - text, image or button EditText todoEditText = dialog.findViewById(R.id.your_edit_text); Button mPositivButton = dialog.findViewById(R.id.your_yes_button); Button mNegativeButton = dialog.findViewById(R.id.your_cancle_button); mPositivButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String task = String.valueOf(todoEditText.getText()); todo.add("" + task); dialog.dismiss(); } }); mNegativeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show();
這篇文章也可以幫助你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.