2013-08-21 3 views
0

Я новичок в Android и мой вопрос: я создал метод «Mark As Completed», когда я нажимаю на него, он устанавливает истинное значение в базе данных. То, что я хочу сейчас, - это когда я нажимаю на метку как завершенный, что элемент удален из списка, но не из базы данных. Является ли это возможным?Как удалить элемент из списка, не удаляя его в Android?

EDIT:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    addTasklist = (EditText)findViewById(R.id.addTasklist); 
    taskList_completed = (CheckBox)findViewById(R.id.completedflag); 
    Button ok = (Button)findViewById(R.id.add); 
    ok.setOnClickListener(this); 
    list(); 
    } 
public void list(){ 
    db = new TodoTask_Database(getApplicationContext()); 
    list_tasklistname = (ListView)findViewById(R.id.listview); 
    list = db.getAllTaskList(); 
    adapter = new CustomAdapter(Main_Activity.this, R.layout.tasklist_row, list); 
    list_tasklistname.setAdapter(adapter); 
    db.close(); 
    adapter.notifyDataSetChanged(); 
    registerForContextMenu(list_tasklistname); 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    Position = info.position; 
    switch (item.getItemId()) { 
case R.id.MarkAsCompleted: 
     db = new TodoTask_Database(getApplicationContext()); 
     task = adapter.getItem(Position); 
     int taskList_Id = task.getTaskListId(); 
     // here is database method which is setting item value true when mark as completed on long click listener is pressed. 
db.Complete_TaskList(taskList_Id);    
     break; 
     } 
    return super.onOptionsItemSelected(item); 
    } 

Мой Выборочный список Adapter:

public class CustomAdapter extends ArrayAdapter<Task> { 

    private List<Task> dataitem; 
    private Activity activity; 
    TodoTask_Database db; 

public CustomAdapter(Activity a, int textViewResourceId, List<Task> items) { 
    super(a, textViewResourceId, items); 
    this.dataitem = items; 
    this.activity = a; 
} 

public static class ViewHolder{ 
    public TextView tasklistTitle; 
    public TextView createdDate; 
    public CheckBox completedflag; 
} 

    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    final ViewHolder holder; 
    if (v == null) { 
     LayoutInflater vi = 
      (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.tasklist_row, null); 
     holder = new ViewHolder(); 
     holder.tasklistTitle = (TextView) v.findViewById(R.id.tasklistTitle); 
     holder.createdDate = (TextView) v.findViewById(R.id.createdDate); 
     holder.completedflag = (CheckBox) v.findViewById(R.id.completedflag); 
     v.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)v.getTag(); 

    final Task custom = dataitem.get(position); 
    if (custom != null) { 
     holder.tasklistTitle.setText(custom.getTaskListTitle()); 
     holder.createdDate.setText(custom.getTaskListCreated()); 
     holder.completedflag.setText(custom.getTaskListCompletedFlag()); 
    } 
    return v; 
} 
    public synchronized void refresAdapter(List<Task> dataitems) { 
    dataitem.clear(); 
    dataitem.addAll(dataitems); 
    notifyDataSetChanged(); 
    } 
} 
+0

Удалите этот элемент из адаптера списка. –

+0

Да, я пытаюсь сделать это в своем адаптере пользовательского списка. но провал. – Shweta

+1

сообщение, что вы сделали – Raghunandan

ответ

2

Добавить

list.remove(Position); // Remove item from List 
adapter.notifyDataSetChanged(); // Notify adapter 

в case R.id.MarkAsCompleted. Как показано ниже

case R.id.MarkAsCompleted: 
     db = new TodoTask_Database(getApplicationContext()); 
     task = adapter.getItem(Position); 
     int taskList_Id = task.getTaskListId(); 
     // here is database method which is setting item value true when mark as completed on long click listener is pressed. 
db.Complete_TaskList(taskList_Id); 
// Remove from List 
list.remove(Position); // Added here 
adapter.notifyDataSetChanged(); // Added here   
     break; 

это удалит элемент формы ListView.

+0

Он работает, Большое вам спасибо, вы спасли мой день. – Shweta

+0

Ваш самый приветствуемый :) и congs –

+0

oh, но после загрузки приложения снова он отображает те же значения снова, он не обновляет список. как это сделать? – Shweta

Смежные вопросы