Я пытаюсь передать свои значения из настраиваемого диалогового окна, содержащего текст, время и дату, в мой 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);
}
}
Это мой диалог
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);
}
}