未在自定义Alert Builder视图布局中从EditText获取文本

时间:2016-01-30 23:27:39

标签: java android android-layout

我是Android新手并构建一个简单的待办事项列表。 在Alert Builder View的自定义布局中,我想从此自定义布局中检索两个EditText字段中的用户输入。

这是自定义视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="118dp"
        android:layout_height="60dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="@string/describe"
        android:textColor="#A4C639" />

    <EditText
        android:id="@+id/task_description"
        android:layout_width="155dp"
        android:layout_height="wrap_content"
        android:gravity="top|left"
        android:inputType="textMultiLine|textAutoComplete|textAutoCorrect|textCapSentences"
        android:lines="4"
        android:minLines="2"
        android:hint="@string/text_hint"
        android:imeOptions="actionNext|actionDone"
        android:scrollbars="horizontal" />
    <requestFocus />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="118dp"
            android:layout_height="92dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="@string/when"
            android:textColor="#A4C639" />

        <EditText
            android:id="@+id/task_date"
            android:layout_width="155dp"
            android:layout_height="wrap_content"
            android:gravity="top|left"
            android:inputType="date"
            android:imeOptions="actionNext|actionDone"
            android:scrollbars="horizontal" />
        <requestFocus />

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1">

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="@string/task_relevance"
            android:textColor="#A4C639" />

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/task_favourite"
            />
        <!--
        <Button
            android:layout_width="64dp"
            android:layout_height="wrap_content"
            android:text="@string/save"
            android:id="@+id/describetaskButton"
            android:onClick="saveEntryClickFunction"
            android:layout_weight="0.14" />-->
    </LinearLayout>


</LinearLayout>

这是主要活动:

package com.example.TodoList;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import com.example.TodoList.db.TaskContract;
import com.example.TodoList.db.TaskDBHelper;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import static com.example.TodoList.R.id.task_description;
import static com.example.TodoList.db.TaskContract;

public class MainActivity extends ListActivity {
    private ListAdapter listAdapter;
    private TaskDBHelper helper;
    private Toolbar toolbar;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final EditText inputField = new EditText(this);
        builder.setNegativeButton("Abbrechen", null);

        switch (item.getItemId()) {
            case R.id.action_detail_task:
                Intent TaskActivityIntent = new Intent(getApplicationContext(),
                        TaskActivity.class);
                startActivity(TaskActivityIntent);
                return true;

             case R.id.action_add_task:
                 LayoutInflater inflater = (this).getLayoutInflater();
                 builder.setTitle("Eine Aufgabe hinzufügen");
                 builder.setMessage("Was möchten Sie erledigen? Bitte benennen Sie die Aufgabe");
                 builder.setView(R.layout.custom_view);
                 final View view=inflater.inflate(R.layout.custom_view, null);

                 builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialogInterface, int i) {
                         View v = (View) view.getParent();
                         final EditText taskDescription;
                         taskDescription = (EditText)view.findViewById(R.id.task_description);
                         taskDescription.getText().toString().trim();
                         Log.d("EditText TaskDate", taskDescription.getText().toString().trim());

                         final EditText taskDate;
                         taskDate = (EditText) view.findViewById(R.id.task_date);
                         taskDate.getText().toString().trim();
                         Log.d("EditText TaskDate", taskDate.getText().toString().trim());
                         final CheckBox taskFavourite;
                         taskFavourite = (CheckBox) view.findViewById(R.id.task_favourite);
                         if (taskFavourite.isChecked()) {
                             helper = new TaskDBHelper(MainActivity.this);
                             SQLiteDatabase db = helper.getWritableDatabase();
                             ContentValues values = new ContentValues();
                             values.clear();
                             values.put(Columns.FAVOURITE, String.valueOf(taskFavourite));
                             db.insertWithOnConflict(TaskContract.TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE);
                         } else {
                             Log.d("Task Activity", "Checkbox is not checked");
                         }
                         Log.d("Task Text", taskDescription.getText().toString().trim());
                         Log.d("Task Date", taskDate.getText().toString().trim());
                         helper = new TaskDBHelper(MainActivity.this);
                         SQLiteDatabase db = helper.getWritableDatabase();
                         ContentValues values = new ContentValues();
                         values.clear();
                         values.put(TaskContract.Columns.TASK_DESCRIPTION, task_description);
                         values.put(Columns.DATE, String.valueOf(taskDate));
                         //values.put(Columns.FAVOURITE, String.valueOf(taskFavourite));
                         db.insertWithOnConflict(TaskContract.TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE);
                         updateUI();
                         db.close();
                     }
                 });
                 builder.create().show();
                 return true;


            case R.id.action_remove_task:
                builder.setTitle("Eine Aufgabe entfernen");
                builder.setMessage("Wurde die Aufgabe bereits erledigt?");
                View checkBoxView = View.inflate(this, R.layout.checkbox, null);
                CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox);
                builder.setView(checkBoxView);
                builder.setNegativeButton("Entfernen", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        String task = inputField.getText().toString();
                        String sql = String.format("DELETE FROM %s WHERE %s = '%s'",
                                TABLE,
                                Columns.TASK,
                                Columns.TASK_DESCRIPTION,
                                Columns.TASK_STATUS,
                                Columns.DATE,
                                Columns.FAVOURITE,
                                task);
                        helper = new TaskDBHelper(MainActivity.this);
                        SQLiteDatabase sqlDB = helper.getWritableDatabase();
                        sqlDB.execSQL(sql);
                        sqlDB.close();
                        updateUI();
                    }
                });
                builder.create().show();
                return true;
            default:
                return false;
        }
    }

    public void onDoneCheckBoxClick(View view) {
        Log.d("onDoneCheckBoxClick", "First Check Box Click Function");
        View v = (View) view.getParent();
        TextView taskTextView = (TextView) v.findViewById(R.id.taskTextView);
        helper = new TaskDBHelper(MainActivity.this);
        SQLiteDatabase sqlDB = helper.getWritableDatabase();
        String task = taskTextView.getText().toString();
        String sql = String.format("DELETE FROM %s WHERE %s = '%s'",
                TABLE,
                TaskContract.Columns.TASK,
                task);

        sqlDB.execSQL(sql);
        sqlDB.close();
        updateUI();
    }

    public void DetailClick(View view) {
        Intent TaskActivityIntent = new Intent(getApplicationContext(),
                TaskActivity.class);
        startActivity(TaskActivityIntent);
    }

     private void updateUI() {
        helper = new TaskDBHelper(MainActivity.this);
        SQLiteDatabase sqlDB = helper.getReadableDatabase();
        Cursor cursor = sqlDB.query(TABLE,
                new String[]{Columns._ID, Columns.TASK, Columns.DATE,
                        Columns.TASK_STATUS
                       },
                null, null, null, null, null
        );


        listAdapter = new SimpleCursorAdapter(
                this,
                R.layout.task_view,
                cursor,
                new String[]{Columns.TASK, Columns.DATE, Columns.TASK_STATUS},
                new int[]{R.id.taskTextView,R.id.taskDateView,R.id.task_favourite},
                0
        );

        this.setListAdapter(listAdapter);

    }

    public void onDetailViewClick(View view) {
        Intent TaskActivityIntent = new Intent(getApplicationContext(),
                TaskActivity.class);
        startActivity(TaskActivityIntent);
    }

    @Override
    public void onStart() {
        super.onStart();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client.connect();
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Main Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://com.example.TodoList/http/host/path")
        );
        AppIndex.AppIndexApi.start(client, viewAction);
    }

    @Override
    public void onStop() {
        super.onStop();

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        Action viewAction = Action.newAction(
                Action.TYPE_VIEW, // TODO: choose an action type.
                "Main Page", // TODO: Define a title for the content shown.
                // TODO: If you have web page content that matches this app activity's content,
                // make sure this auto-generated web page URL is correct.
                // Otherwise, set the URL to null.
                Uri.parse("http://host/path"),
                // TODO: Make sure this auto-generated app deep link URI is correct.
                Uri.parse("android-app://com.example.TodoList/http/host/path")
        );
        AppIndex.AppIndexApi.end(client, viewAction);
        client.disconnect();
    }
}

我没有收到logcat中EditText的任何记录输入。 任何提示或帮助将非常感激!

1 个答案:

答案 0 :(得分:1)

您使用的视图与对话框中的视图不同。 尝试将dialogInterface转换为Dialog:

taskDescription = (EditText) ((Dialog) dialogInterface).findViewById(R.id.task_description);