mirror of
https://github.com/wismna/DoNext.git
synced 2025-10-03 15:40:14 -04:00
Task list is updated in the tab where a new task is created
This commit is contained in:
@@ -3,7 +3,6 @@ package com.wismna.geoffroy.donext.activities;
|
|||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.DialogFragment;
|
import android.app.DialogFragment;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@@ -11,6 +10,7 @@ import android.support.v4.app.FragmentManager;
|
|||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -20,16 +20,18 @@ import android.widget.RadioGroup;
|
|||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
|
import com.wismna.geoffroy.donext.adapters.SmartFragmentStatePagerAdapter;
|
||||||
|
import com.wismna.geoffroy.donext.adapters.TaskAdapter;
|
||||||
import com.wismna.geoffroy.donext.dao.Task;
|
import com.wismna.geoffroy.donext.dao.Task;
|
||||||
import com.wismna.geoffroy.donext.dao.TaskList;
|
import com.wismna.geoffroy.donext.dao.TaskList;
|
||||||
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
||||||
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
|
||||||
import com.wismna.geoffroy.donext.fragments.NewTaskFragment;
|
import com.wismna.geoffroy.donext.fragments.NewTaskFragment;
|
||||||
import com.wismna.geoffroy.donext.fragments.TaskFragment;
|
import com.wismna.geoffroy.donext.fragments.TasksFragment;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements NewTaskFragment.NewTaskListener, TaskFragment.OnListFragmentInteractionListener {
|
public class MainActivity extends AppCompatActivity implements NewTaskFragment.NewTaskListener, TasksFragment.OnListFragmentInteractionListener {
|
||||||
|
|
||||||
protected TaskDataAccess taskDataAccess;
|
protected TaskDataAccess taskDataAccess;
|
||||||
/**
|
/**
|
||||||
@@ -122,20 +124,26 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void onDialogPositiveClick(DialogFragment dialog) {
|
public void onDialogPositiveClick(DialogFragment dialog) {
|
||||||
|
// Get the dialog fragment
|
||||||
Dialog dialogView = dialog.getDialog();
|
Dialog dialogView = dialog.getDialog();
|
||||||
|
// Get the controls
|
||||||
Spinner listSpinner = (Spinner) dialogView.findViewById(R.id.new_task_list);
|
Spinner listSpinner = (Spinner) dialogView.findViewById(R.id.new_task_list);
|
||||||
EditText nameText = (EditText) dialogView.findViewById(R.id.new_task_name);
|
EditText nameText = (EditText) dialogView.findViewById(R.id.new_task_name);
|
||||||
EditText descText = (EditText) dialogView.findViewById(R.id.new_task_description);
|
EditText descText = (EditText) dialogView.findViewById(R.id.new_task_description);
|
||||||
RadioGroup priorityGroup = (RadioGroup) dialogView.findViewById(R.id.new_task_priority);
|
RadioGroup priorityGroup = (RadioGroup) dialogView.findViewById(R.id.new_task_priority);
|
||||||
RadioButton priorityRadio = (RadioButton) dialogView.findViewById(priorityGroup.getCheckedRadioButtonId());
|
RadioButton priorityRadio = (RadioButton) dialogView.findViewById(priorityGroup.getCheckedRadioButtonId());
|
||||||
Cursor cursor = taskDataAccess.createTask(
|
TaskList taskList = (TaskList) listSpinner.getSelectedItem();
|
||||||
|
// Add the task to the database
|
||||||
|
Task task = taskDataAccess.createTask(
|
||||||
nameText.getText().toString(),
|
nameText.getText().toString(),
|
||||||
descText.getText().toString(),
|
descText.getText().toString(),
|
||||||
priorityRadio.getText().toString(),
|
priorityRadio.getText().toString(),
|
||||||
((TaskList) listSpinner.getSelectedItem()).getId());
|
taskList.getId());
|
||||||
|
|
||||||
// TODO: uncomment after successfully creating adapter
|
// Update the corresponding tab adapter
|
||||||
//adapter.changeCursor(cursor);
|
TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(listSpinner.getSelectedItemPosition());
|
||||||
|
TaskAdapter taskAdapter = ((TaskAdapter)((RecyclerView)taskFragment.getView()).getAdapter());
|
||||||
|
taskAdapter.add(task, taskAdapter.getItemCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -176,7 +184,7 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
|
|||||||
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
|
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
|
||||||
* one of the sections/tabs/pages.
|
* one of the sections/tabs/pages.
|
||||||
*/
|
*/
|
||||||
public class SectionsPagerAdapter extends FragmentPagerAdapter {
|
public class SectionsPagerAdapter extends SmartFragmentStatePagerAdapter {
|
||||||
|
|
||||||
public SectionsPagerAdapter(FragmentManager fm) {
|
public SectionsPagerAdapter(FragmentManager fm) {
|
||||||
super(fm);
|
super(fm);
|
||||||
@@ -186,7 +194,7 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
|
|||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
// getItem is called to instantiate the fragment for the given page.
|
// getItem is called to instantiate the fragment for the given page.
|
||||||
// Return a PlaceholderFragment (defined as a static inner class below).
|
// Return a PlaceholderFragment (defined as a static inner class below).
|
||||||
return TaskFragment.newInstance(taskLists.get(position).getId());
|
return TasksFragment.newInstance(taskLists.get(position).getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -0,0 +1,45 @@
|
|||||||
|
package com.wismna.geoffroy.donext.adapters;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by geoffroy on 15-11-28.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||||
|
import android.util.SparseArray;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Extension of FragmentStatePagerAdapter which intelligently caches
|
||||||
|
all active fragments and manages the fragment lifecycles.
|
||||||
|
Usage involves extending from SmartFragmentStatePagerAdapter as you would any other PagerAdapter.
|
||||||
|
*/
|
||||||
|
public abstract class SmartFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
|
||||||
|
// Sparse array to keep track of registered fragments in memory
|
||||||
|
private SparseArray<Fragment> registeredFragments = new SparseArray<>();
|
||||||
|
|
||||||
|
public SmartFragmentStatePagerAdapter(FragmentManager fragmentManager) {
|
||||||
|
super(fragmentManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register the fragment when the item is instantiated
|
||||||
|
@Override
|
||||||
|
public Object instantiateItem(ViewGroup container, int position) {
|
||||||
|
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||||
|
registeredFragments.put(position, fragment);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unregister when the item is inactive
|
||||||
|
@Override
|
||||||
|
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||||
|
registeredFragments.remove(position);
|
||||||
|
super.destroyItem(container, position, object);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the fragment for the position (if instantiated)
|
||||||
|
public Fragment getRegisteredFragment(int position) {
|
||||||
|
return registeredFragments.get(position);
|
||||||
|
}
|
||||||
|
}
|
@@ -8,14 +8,13 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
import com.wismna.geoffroy.donext.R;
|
import com.wismna.geoffroy.donext.R;
|
||||||
import com.wismna.geoffroy.donext.dao.Task;
|
import com.wismna.geoffroy.donext.dao.Task;
|
||||||
import com.wismna.geoffroy.donext.fragments.TaskFragment.OnListFragmentInteractionListener;
|
import com.wismna.geoffroy.donext.fragments.TasksFragment.OnListFragmentInteractionListener;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link RecyclerView.Adapter} that can display a {@link Task} and makes a call to the
|
* {@link RecyclerView.Adapter} that can display a {@link Task} and makes a call to the
|
||||||
* specified {@link OnListFragmentInteractionListener}.
|
* specified {@link OnListFragmentInteractionListener}.
|
||||||
* TODO: Replace the implementation with code for your data type.
|
|
||||||
*/
|
*/
|
||||||
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
|
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
|
||||||
|
|
||||||
@@ -57,6 +56,17 @@ public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
|
|||||||
return mValues.size();
|
return mValues.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(Task item, int position) {
|
||||||
|
mValues.add(position, item);
|
||||||
|
notifyItemInserted(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(Task item) {
|
||||||
|
int position = mValues.indexOf(item);
|
||||||
|
mValues.remove(position);
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
public final View mView;
|
public final View mView;
|
||||||
public final TextView mIdView;
|
public final TextView mIdView;
|
||||||
|
@@ -40,14 +40,21 @@ public class TaskDataAccess {
|
|||||||
public void close() {
|
public void close() {
|
||||||
dbHelper.close();
|
dbHelper.close();
|
||||||
}
|
}
|
||||||
public Cursor createTask(String name, String description, String priority, long taskList) {
|
public Task createTask(String name, String description, String priority, long taskList) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(DatabaseHelper.TASKS_COLUMN_NAME, name);
|
values.put(DatabaseHelper.TASKS_COLUMN_NAME, name);
|
||||||
values.put(DatabaseHelper.TASKS_COLUMN_DESC, description);
|
values.put(DatabaseHelper.TASKS_COLUMN_DESC, description);
|
||||||
values.put(DatabaseHelper.TASKS_COLUMN_PRIORITY, priorities.indexOf(priority));
|
values.put(DatabaseHelper.TASKS_COLUMN_PRIORITY, priorities.indexOf(priority));
|
||||||
values.put(DatabaseHelper.TASKS_COLUMN_LIST, taskList);
|
values.put(DatabaseHelper.TASKS_COLUMN_LIST, taskList);
|
||||||
database.insert(DatabaseHelper.TASKS_TABLE_NAME, null, values);
|
long insertId = database.insert(DatabaseHelper.TASKS_TABLE_NAME, null, values);
|
||||||
return getAllTasksCursor();
|
|
||||||
|
Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME,
|
||||||
|
taskColumns, DatabaseHelper.COLUMN_ID + " = " + insertId, null,
|
||||||
|
null, null, null);
|
||||||
|
cursor.moveToFirst();
|
||||||
|
Task newTask = cursorToTask(cursor);
|
||||||
|
cursor.close();
|
||||||
|
return newTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cursor deleteTask(Cursor taskCursor) {
|
public Cursor deleteTask(Cursor taskCursor) {
|
||||||
|
@@ -20,7 +20,7 @@ import com.wismna.geoffroy.donext.database.TaskDataAccess;
|
|||||||
* Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener}
|
* Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener}
|
||||||
* interface.
|
* interface.
|
||||||
*/
|
*/
|
||||||
public class TaskFragment extends Fragment {
|
public class TasksFragment extends Fragment {
|
||||||
|
|
||||||
private TaskDataAccess taskDataAccess;
|
private TaskDataAccess taskDataAccess;
|
||||||
private static final String TASK_LIST_ID = "task_list_id";
|
private static final String TASK_LIST_ID = "task_list_id";
|
||||||
@@ -31,12 +31,12 @@ public class TaskFragment extends Fragment {
|
|||||||
* Mandatory empty constructor for the fragment manager to instantiate the
|
* Mandatory empty constructor for the fragment manager to instantiate the
|
||||||
* fragment (e.g. upon screen orientation changes).
|
* fragment (e.g. upon screen orientation changes).
|
||||||
*/
|
*/
|
||||||
public TaskFragment() {
|
public TasksFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public static TaskFragment newInstance(long taskListId) {
|
public static TasksFragment newInstance(long taskListId) {
|
||||||
TaskFragment fragment = new TaskFragment();
|
TasksFragment fragment = new TasksFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putLong(TASK_LIST_ID, taskListId);
|
args.putLong(TASK_LIST_ID, taskListId);
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
@@ -9,5 +9,5 @@
|
|||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="16dp"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
app:layoutManager="LinearLayoutManager"
|
app:layoutManager="LinearLayoutManager"
|
||||||
tools:context=".fragments.TaskFragment"
|
tools:context=".fragments.TasksFragment"
|
||||||
tools:listitem="@layout/fragment_task" />
|
tools:listitem="@layout/fragment_task" />
|
||||||
|
Reference in New Issue
Block a user