Android Studio:将值从自定义对话框传递到ListView活动

时间:2018-12-12 23:36:46

标签: java android android-studio

我正在尝试将我的值从具有文本,时间和日期的自定义对话框传递到我的主要活动中的Listview。我无法在应用崩溃的情况下将值传递到文本视图中。

我觉得大多数问题出在打开对话框的方式上。这是我的主要活动:

public class MainActivity extends AppCompatActivity 
implements AddTaskDialog.AddTaskDialogListener {

private DbHelper dbHelper;
private ListView firstTask;
private ArrayAdapter<String> mAdapter;
private ImageButton archiveBtn;
TextView taskTitle;
TextView taskDate;
TextView taskTime;
Activity activity;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    dbHelper = new DbHelper(this);
    firstTask = (ListView)findViewById(R.id.taskOne);
    archiveBtn = (ImageButton) findViewById(R.id.archiveButton);
    archiveBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            goToArchive();
        }
    });
    loadTaskList();
}

@Override
protected void onResume()
{
    super.onResume();
    loadTaskList();
}

public void onCheckboxClicked(View view){
    CheckBox check = ((CheckBox) view);

    if(check.isChecked()){
        check.setChecked(false); //Prevents the next checkbox from becoming checked in place of the previous task
        View parent = (View)view.getParent();
        taskTitle = (TextView)findViewById(R.id.title);
        taskDate = (TextView)findViewById(R.id.date);
        taskTime = (TextView)findViewById(R.id.time);
        String task = String.valueOf(taskTitle.getText());
        String date = String.valueOf(taskDate.getText());
        String time = String.valueOf(taskTime.getText());
        dbHelper.archiveTask(task);
        dbHelper.archiveTask(date);
        dbHelper.archiveTask(time);
        loadTaskList();
    }
}


private void loadTaskList() {
    ArrayList<String> tasklist = dbHelper.getTasklist();
    if(mAdapter == null){
        mAdapter = new ArrayAdapter<String>(this, R.layout.main_row,R.id.title, tasklist);
        firstTask.setAdapter(mAdapter);
    }else{
        mAdapter.clear();
        mAdapter.addAll(tasklist);
        mAdapter.notifyDataSetChanged();
    }
}

public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.menu,menu);
    Drawable icon = menu.getItem(0).getIcon();
    icon.mutate();
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.addtask:
            openDialog();
    }
    return super.onOptionsItemSelected(item);
}

private void openDialog() {
   AddTaskDialog addTaskDialog = new AddTaskDialog();
   addTaskDialog.show(getSupportFragmentManager(), "Task");


}


public void deleteTask(View view){
    View parent = (View)view.getParent();
    taskTitle = (TextView)findViewById(R.id.title);
    taskDate = (TextView)findViewById(R.id.date);
    taskTime = (TextView)findViewById(R.id.time);
    String task = String.valueOf(taskTitle.getText());
    String date = String.valueOf(taskDate.getText());
    String time = String.valueOf(taskTime.getText());
    dbHelper.deleteTask(task);
    dbHelper.deleteTask(date);
    dbHelper.deleteTask(time);

}

public void goToArchive() {
    Intent intent = new Intent(this, ArchiveActivity.class);
    startActivity(intent);
}

public void goToTaskEditor(View view){
    Intent intent = new Intent(this, EditView.class);
    startActivity(intent);
}

@Override
public void applyTexts(String tTitle, String tDate, String tTime) {
    taskTitle.setText(tTitle);
    taskDate.setText(tDate);
    taskTime.setText(tTime);
   }
 }

这是我的Dialog类

public class AddTaskDialog extends AppCompatDialogFragment implements
        View.OnClickListener {

    Button btnDatePicker, btnTimePicker;
    EditText txtDate, txtTime, txtTask;
    private int mYear, mMonth, mDay, mHour, mMinute;
    private AddTaskDialogListener listener;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.addtask, null);

        builder.setView(view)
                .setTitle("Add Task")
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String tTitle = txtTask.getText().toString();
                        String tDate = txtDate.getText().toString();
                        String tTime = txtTime.getText().toString();
                        listener.applyTexts(tTitle, tDate, tTime);

                    }
                });

        btnDatePicker = (Button) view.findViewById(R.id.btn_date);
        btnTimePicker = (Button) view.findViewById(R.id.btn_time);
        txtDate = (EditText) view.findViewById(R.id.in_date);
        txtTime = (EditText) view.findViewById(R.id.in_time);
        txtTask = (EditText) view.findViewById(R.id.taskname);

        btnDatePicker.setOnClickListener(this);
        btnTimePicker.setOnClickListener(this);
        return builder.create();
    }

    @Override
    public void onClick(View v) {

        if (v == btnDatePicker) {

            // Get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);


            DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
                        }
                    }, mYear, mMonth, mDay);
            datePickerDialog.show();
        }
        if (v == btnTimePicker) {

            // Get Current Time
            final Calendar c = Calendar.getInstance();
            mHour = c.get(Calendar.HOUR_OF_DAY);
            mMinute = c.get(Calendar.MINUTE);

            // Launch Time Picker Dialog
            TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity(),
                    new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay,
                                              int minute) {
                            txtTime.setText(hourOfDay + ":" + minute);
                        }
                    }, mHour, mMinute, false);
            timePickerDialog.show();

        }

    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listener = (AddTaskDialogListener)context;
        } catch (ClassCastException e) {
            throw  new ClassCastException(context.toString()+"must implement listner");
        }
    }

    public interface AddTaskDialogListener{
        void applyTexts (String tTitle, String tDate, String tTime);

    }
}

0 个答案:

没有答案