在回收站视图

时间:2017-02-27 05:44:45

标签: android sqlite android-recyclerview

我有两个活动,即TaskListActivity(这是一个启动器活动)和MainActivity。这两个活动分别托管了两个片段DetailListfragmentDetailFragment。我有另一个名为DatabaseHandler的类,其中有一个名为“任务”的表。有三列,KEY_ID,KEY_TASK,KEY_DETAIL。

DetailListfragment内我有回收视图,它显示存储在数据库中的内容。 Recycler视图显示任务的标题,即KEY_TASK。现在,当我点击特定任务时,我会转到具有' edittext '的DetailFragment。此文本显示已在Recycler视图中单击的任务标题。

例如,如果我的数据库有4行,即“睡觉”,“在10:00”,“跳舞”,“在5:00”和“#39;还有两个。当我点击睡觉时,我在DetailFragment中的编辑文本显示“正在睡觉”。作为一个文本。现在,当我编辑睡眠到其他任务时,请说“玩”#39;并导航回DetailListActivity,不会反映该更改。 Recycler视图仍在显示“睡眠”状态。 我还有一个名为Task的类,其实例进入数据库。 我在我的Recyclerview上使用了adapter.notifydatasetchanged onResume但仍然没有帮助。

TaskListActivity

 public class TaskListActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        DatabaseHandler db = new DatabaseHandler(this);

        /**
         * CRUD Operations
         * */
        // Inserting Contacts
        Log.d("Insert: ", "Inserting ..");
        db.addTask(new Task("Ravi", "9100000000"));
        db.addTask(new Task("Srinivas", "9199999999"));
        db.addTask(new Task("Tommy", "9522222222"));
        db.addTask(new Task("Timmothy","asnjsnas"));
        // db.addContact(new Contact("Karthik", "9533333333"));
        Log.d("Reading: ", "Reading all contacts..");
        List<Task> contacts = db.getAllTasks();

        for (Task cn : contacts) {
            String log = "Id: "+cn.get_Id()+" ,Name: " + cn.get_Heading() ;
            // Writing Contacts to log
            Log.d("Name: ", log);
        }

        setContentView(R.layout.tasklist);
        FragmentManager fm= getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_container);
        if (fragment == null) {
            fragment = new DetailListFragment();
            fm.beginTransaction()
                    .add(R.id.fragment_container1, fragment)
                    .commit();
        }


    }
}

DetailListFragment

    public class DetailListFragment extends Fragment{
    private RecyclerView detailrecyclerview;
   private TaskAdapter mAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_task_list, container, false);
        detailrecyclerview = (RecyclerView) view
                .findViewById(R.id.task_recycler_view);
        detailrecyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
        updateUI();
        return view;
    }
    private void updateUI() {
        DatabaseHandler db=new DatabaseHandler(getActivity());
        List<Task> tasks = db.getAllTasks();
        if (mAdapter == null) {
            mAdapter = new TaskAdapter(tasks);
            detailrecyclerview.setAdapter(mAdapter);
        }else {
            mAdapter.notifyDataSetChanged();
        }
    }
    @Override
    public void onResume() {
        super.onResume();
//        Log.d("Resume",DetailFragment.task.get_Heading());
        updateUI();
    }
private class TaskHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
    private Task mTask;
    public TextView mTitleTextView;
    public TaskHolder(View itemView) {
        super(itemView);
        mTitleTextView= (TextView) itemView;
        itemView.setOnClickListener(this);
    }
    public void bindtask(Task task) {
        mTask = task;
        mTitleTextView.setText(mTask.get_Heading());

    }
    @Override
    public void onClick(View v) {
       // Toast.makeText(getActivity(),
              //  mTask.get_Heading() + " clicked!", Toast.LENGTH_SHORT)
                //.show();
        Intent i=MainActivity.newIntent(getActivity(),mTask.get_Id());
        startActivity(i);
    }
}
    private class TaskAdapter extends RecyclerView.Adapter<TaskHolder> {
        private List<Task> mTasks;
        public TaskAdapter(List<Task>tasks) {
            mTasks = tasks;
        }
        @Override
        public TaskHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            View view = layoutInflater
                    .inflate(android.R.layout.simple_list_item_1, parent, false);
            return new TaskHolder(view);
        }
        @Override
        public void onBindViewHolder(TaskHolder holder, int position) {
            Task task = mTasks.get(position);
          //  holder.mTitleTextView.setText(task.get_Heading());
          holder.bindtask(task);
        }

        @Override
        public int getItemCount() {
            return mTasks.size();
        }
    }
}

MainActivity

public class MainActivity extends FragmentActivity {
    private static final String EXTRA_TASK_ID =
            "com.panwar.id";
    public static Intent newIntent(Context packageContext,int ID) {
        Intent intent = new Intent(packageContext, MainActivity.class);
        intent.putExtra(EXTRA_TASK_ID,ID);
        return intent;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        FragmentManager fm= getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_container);
        if (fragment == null) {
            int id=getIntent().getIntExtra(MainActivity.EXTRA_TASK_ID,0);
            fragment = DetailFragment.newInstance(id);
            fm.beginTransaction()
                    .add(R.id.fragment_container, fragment)
                    .commit();
        }


    }
}

DetailFragment

public class DetailFragment extends Fragment {
    private static final String Detail_id = "crime_id";
    public static  Task task;
    String str1,str2;
    private EditText mHeading,mDetail;
    private Button b;
    public static DetailFragment newInstance(int Id) {
        Bundle args = new Bundle();
        args.putInt(Detail_id, Id);
        DetailFragment fragment = new DetailFragment();
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //task = new Task();
    //int id=getActivity().getIntent().getIntExtra(MainActivity.EXTRA_TASK_ID,0);
       //task=db.getTask(id);
        DatabaseHandler db=new DatabaseHandler(getActivity());
        task=db.getTask(getArguments().getInt(Detail_id));
    }
    @Override
    public void onPause() {
        super.onPause();

    }

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View v = inflater.inflate(R.layout.fragment_detail, container, false);
        mHeading= (EditText) v.findViewById(R.id.heading);
        mDetail= (EditText) v.findViewById(R.id.details);

        mHeading.setText(task.get_Heading());
        mDetail.setText(task.get_Detail());


       final DatabaseHandler db=new DatabaseHandler(getActivity());

        mHeading.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                task.set_Heading(s.toString());

            }
        });
        mDetail.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                task.set_Detail(s.toString());
            }
        });




        int j=db.updateTask(task);//Main problem is here 
        return v;
    }
}

数据库处理器

 public class DatabaseHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;


    private static final String DATABASE_NAME = "taskManager";

    // Contacts table name
    private static final String TABLE_TASKS = "tasks";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_TASK = "heading";
    private static final String KEY_DETAIL = "detail";
    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_TASKS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TASK + " TEXT,"
                + KEY_DETAIL + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKS);

        // Create tables again
        onCreate(db);
    }
    void addTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_TASK, task.get_Heading()); // Contact Name
        values.put(KEY_DETAIL, task.get_Detail()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_TASKS, null, values);
        db.close(); // Closing database connection
    }
    public int updateTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();
   Log.d("bc",task.get_Heading());
        ContentValues values = new ContentValues();
        values.put(KEY_TASK, task.get_Heading());
        values.put(KEY_DETAIL, task.get_Detail());

        // updating row
        return db.update(TABLE_TASKS, values, KEY_ID+ " = ?",
                new String[] { String.valueOf(task.get_Id()) });
    }
    Task  getTask(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_TASKS, new String[] { KEY_ID,
                        KEY_TASK, KEY_DETAIL }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Task task = new Task(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));

        return task;
    }

    public List<Task> getAllTasks() {
        List<Task> taskList = new ArrayList<Task>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_TASKS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Task task = new Task();
                task.set_Id(Integer.parseInt(cursor.getString(0)));
                task.set_Heading(cursor.getString(1));
                task.set_Detail(cursor.getString(2));
                // Adding contact to list
                taskList.add(task);
            } while (cursor.moveToNext());
        }

        // return contact list
        return taskList;
    }

    public void deleteTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_TASKS, KEY_ID + " = ?",
                new String[] { String.valueOf(task.get_Id()) });
        db.close();
    }
    public int getTaskCount() {
        String countQuery = "SELECT  * FROM " + TABLE_TASKS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }



}

0 个答案:

没有答案
相关问题