Task list is updated in the tab where a new task is created

This commit is contained in:
2015-11-28 14:16:54 -05:00
parent f7eb5ca018
commit 354618ccab
6 changed files with 89 additions and 19 deletions

View File

@@ -3,7 +3,6 @@ package com.wismna.geoffroy.donext.activities;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
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.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
@@ -20,16 +20,18 @@ import android.widget.RadioGroup;
import android.widget.Spinner;
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.TaskList;
import com.wismna.geoffroy.donext.database.TaskDataAccess;
import com.wismna.geoffroy.donext.database.TaskListDataAccess;
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;
public class MainActivity extends AppCompatActivity implements NewTaskFragment.NewTaskListener, TaskFragment.OnListFragmentInteractionListener {
public class MainActivity extends AppCompatActivity implements NewTaskFragment.NewTaskListener, TasksFragment.OnListFragmentInteractionListener {
protected TaskDataAccess taskDataAccess;
/**
@@ -122,20 +124,26 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
}
@Override
public void onDialogPositiveClick(DialogFragment dialog) {
// Get the dialog fragment
Dialog dialogView = dialog.getDialog();
// Get the controls
Spinner listSpinner = (Spinner) dialogView.findViewById(R.id.new_task_list);
EditText nameText = (EditText) dialogView.findViewById(R.id.new_task_name);
EditText descText = (EditText) dialogView.findViewById(R.id.new_task_description);
RadioGroup priorityGroup = (RadioGroup) dialogView.findViewById(R.id.new_task_priority);
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(),
descText.getText().toString(),
priorityRadio.getText().toString(),
((TaskList) listSpinner.getSelectedItem()).getId());
taskList.getId());
// TODO: uncomment after successfully creating adapter
//adapter.changeCursor(cursor);
// Update the corresponding tab adapter
TasksFragment taskFragment = (TasksFragment) mSectionsPagerAdapter.getRegisteredFragment(listSpinner.getSelectedItemPosition());
TaskAdapter taskAdapter = ((TaskAdapter)((RecyclerView)taskFragment.getView()).getAdapter());
taskAdapter.add(task, taskAdapter.getItemCount());
}
@Override
@@ -176,7 +184,7 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public class SectionsPagerAdapter extends SmartFragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
@@ -186,7 +194,7 @@ public class MainActivity extends AppCompatActivity implements NewTaskFragment.N
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// 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

View File

@@ -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);
}
}

View File

@@ -8,14 +8,13 @@ import android.widget.TextView;
import com.wismna.geoffroy.donext.R;
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;
/**
* {@link RecyclerView.Adapter} that can display a {@link Task} and makes a call to the
* specified {@link OnListFragmentInteractionListener}.
* TODO: Replace the implementation with code for your data type.
*/
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
@@ -57,6 +56,17 @@ public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
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 final View mView;
public final TextView mIdView;

View File

@@ -40,14 +40,21 @@ public class TaskDataAccess {
public void 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();
values.put(DatabaseHelper.TASKS_COLUMN_NAME, name);
values.put(DatabaseHelper.TASKS_COLUMN_DESC, description);
values.put(DatabaseHelper.TASKS_COLUMN_PRIORITY, priorities.indexOf(priority));
values.put(DatabaseHelper.TASKS_COLUMN_LIST, taskList);
database.insert(DatabaseHelper.TASKS_TABLE_NAME, null, values);
return getAllTasksCursor();
long insertId = database.insert(DatabaseHelper.TASKS_TABLE_NAME, null, values);
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) {

View File

@@ -20,7 +20,7 @@ import com.wismna.geoffroy.donext.database.TaskDataAccess;
* Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener}
* interface.
*/
public class TaskFragment extends Fragment {
public class TasksFragment extends Fragment {
private TaskDataAccess taskDataAccess;
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
* fragment (e.g. upon screen orientation changes).
*/
public TaskFragment() {
public TasksFragment() {
}
@SuppressWarnings("unused")
public static TaskFragment newInstance(long taskListId) {
TaskFragment fragment = new TaskFragment();
public static TasksFragment newInstance(long taskListId) {
TasksFragment fragment = new TasksFragment();
Bundle args = new Bundle();
args.putLong(TASK_LIST_ID, taskListId);
fragment.setArguments(args);

View File

@@ -9,5 +9,5 @@
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="LinearLayoutManager"
tools:context=".fragments.TaskFragment"
tools:context=".fragments.TasksFragment"
tools:listitem="@layout/fragment_task" />