我有两个活动,即TaskListActivity
(这是一个启动器活动)和MainActivity
。这两个活动分别托管了两个片段DetailListfragment
和DetailFragment
。我有另一个名为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();
}
}