mirror of
https://github.com/wismna/DoNext.git
synced 2025-10-03 07:30:13 -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.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
|
||||
|
@@ -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.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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
@@ -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" />
|
||||
|
Reference in New Issue
Block a user