как я могу сделать диалог подтверждения? - PullRequest
0 голосов
/ 26 октября 2019

Я создал приложение todo в андроид студии. когда вы нажимаете на элемент списка задач, он удаляется сам. но я хочу показать диалог подтверждения до этого. Я использую два Java-класса. MainActivity и Filehelper для этого приложения todo.

, поэтому я использовал этот код для удаления элемента, и он работал:

    @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    items.remove(position);
    adapter.notifyDataSetChanged();
    Toast.makeText(this, "Deleted", Toast.LENGTH_SHORT).show();
}

И теперь я использую этот код с диалоговым окном подтверждения:

    @Override  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Confirm dialog demo !");
    builder.setMessage("You are about to delete all records of database. Do you really want to proceed ?");
    builder.setCancelable(false);
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface parent, int position) {
            items.remove(position);
        }
    });

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "You've changed your mind to delete tasks", Toast.LENGTH_SHORT).show();
        }
    });

    builder.show();
}

но когда я запускаю его на моем Android. я вижу диалог. но когда я нажимаю да, это само по себе сбой. так что вы можете дать мне правильный код. а также скажите мне проблему моего кода?.

MainActivity Code:

public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {

private EditText ItemET;
private Button btn;
private ListView itemList;

private ArrayList<String> items;
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ItemET = findViewById(R.id.item_edit_text);
    btn = findViewById(R.id.add_btn);
    itemList = findViewById(R.id.item_list);

    items = FileHelper.readData(this);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
    itemList.setAdapter(adapter);

    btn.setOnClickListener(this);
    itemList.setOnItemClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.add_btn:
            String ItemEntered = ItemET.getText().toString();
            if (ItemEntered.trim().isEmpty()) {
                Toast.makeText(getApplicationContext(), "Please Enter some detail", Toast.LENGTH_LONG).show();
            } else {
                adapter.add(ItemEntered);
                ItemET.setText("");
                FileHelper.writeData(items, this);
                Toast.makeText(this, "item Added", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}


// Confirm box
@Override  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Confirm dialog demo !");
    builder.setMessage("You are about to delete all records of database. Do you really want to proceed ?");
    builder.setCancelable(false);
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface parent, int position) {
            items.remove(position);
        }
    });

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "You've changed your mind to delete all records", Toast.LENGTH_SHORT).show();
        }
    });

    builder.show();
}

}

FileHelper Code:

открытый класс FileHelper {

public static final String FILENAME = "listinfo.dat";

public static void writeData(ArrayList<String> items, Context context){

    try {
        FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(items);
        oos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

    public static ArrayList<String> readData(Context context) {

        ArrayList<String> itemList = null;
        try {
            FileInputStream fis = context.openFileInput(FILENAME);
            ObjectInputStream ois = new ObjectInputStream(fis);
            itemList = (ArrayList<String>) ois.readObject();
        } catch (FileNotFoundException e) {

            itemList = new ArrayList<>();


            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return itemList;

    }

}

вот и мой MainActivity.xml

<LinearLayout
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">

<LinearLayout

    android:layout_width="match_parent"
    android:layout_marginTop="12dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginBottom="12dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <EditText

        android:id="@+id/item_edit_text"
        android:hint="Enter Item"
        android:layout_width="0dp"
        android:layout_weight="1.9"
        android:layout_marginRight="20dp"
        android:layout_height="wrap_content" />
    <Button
        android:background="@drawable/layout_bg"
        android:id="@+id/add_btn"
        android:text="add"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>


</LinearLayout>

<ListView
    android:background="@drawable/layout_bg"
    android:id="@+id/item_list"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:textAlignment="center"
    android:layout_marginBottom="24dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

1 Ответ

0 голосов
/ 26 октября 2019

Пожалуйста, отправьте изображение logcat. Тогда будет легче выявить проблему. Также проверьте

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface parent, int position) {
        Toast.makeText(getApplicationContext(), "Check if toast is working or crush. ", Toast.LENGTH_SHORT).show();
    }
});

Проверьте работу тоста, когда нажата или нажата кнопка «Да». Тогда вы будете более уверены в проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...