Android fragments 在自定义适配器中更改数据库时刷新列表和适配器

Android fragments 在自定义适配器中更改数据库时刷新列表和适配器,android-fragments,Android Fragments,我的项目是todo 我有4个选项卡,4个片段和4个列表(Actionbar导航包含4个选项卡和ViewPager)。 4列表(选项卡)使用相同的db表,但每个表使用categoryID检索不同的数据。 我使用一个Asynctask来读取数据并将适配器设置为list public class AsyncTaskDB extends AsyncTask<Void, Void, listAdapter> { Context act; int Categoryid; ArrayList&l

我的项目是todo 我有4个选项卡,4个片段和4个列表(Actionbar导航包含4个选项卡和ViewPager)。 4列表(选项卡)使用相同的db表,但每个表使用categoryID检索不同的数据。 我使用一个Asynctask来读取数据并将适配器设置为list

public class AsyncTaskDB extends AsyncTask<Void, Void, listAdapter> {

Context act;
int Categoryid;
ArrayList<memo> arraymemo;
listAdapter myadapter;
ListView list;
listAdapter listAdp;



public AsyncTaskDB(Context acti, int categoryID) {
    this.act = acti;
    this.Categoryid = categoryID;

}

@Override
protected listAdapter doInBackground(Void... params) {
    MemoDBHelper helper = new MemoDBHelper(act);

    // getAllDataByCategoryID
    if (Categoryid != CategoryID.Done_ID)
        arraymemo = helper.getAllTaskByCategory(Categoryid);
    else
        arraymemo = (ArrayList<memo>) helper.gatDoneMemo();



    myadapter = new listAdapter(act, arraymemo);
    if (myadapter == null) {
        Toast.makeText(act, "no data", Toast.LENGTH_SHORT).show();
        cancel(true);
    }
    return myadapter;

}

@Override
protected void onPostExecute(listAdapter result) {

    switch (Categoryid) {
    case CategoryID.Urgent_Imprtant_ID:
        list = (ListView) ((Activity) act)
                .findViewById(R.id.Urgent_Important_list);

                    break;

    case CategoryID.Urgent_Less_Imprtant_ID:
        list = (ListView) ((Activity) act)
                .findViewById(R.id.Urgent_Less_Important_list);

        break;
    case CategoryID.Less_Urgent_Imprtant_ID:
        list = (ListView) ((Activity) act)
                .findViewById(R.id.Less_Urgent_Imprtant_list);

        break;

    case CategoryID.Neither_Urgent_Or_Imprtant_ID:
        list = (ListView) ((Activity) act)
                .findViewById(R.id.Neither_Urgent_Imprtant_list);

        break;
    case CategoryID.Done_ID:

        list = (ListView) ((Activity) act).findViewById(R.id.ArchiveList);
        break;
    }
    list.setAdapter(result);
    this.listAdp = result;

}

public listAdapter getlistAdapter() {
    return this.listAdp;
}
公共类AsyncTaskDB扩展了AsyncTask{
上下文行为;
int分类;
ArrayList arraymemo;
列表适配器myadapter;
列表视图列表;
listAdapter listAdp;
公共AsyncTaskDB(上下文活动,int categoryID){
this.act=acti;
this.Categoryid=Categoryid;
}
@凌驾
受保护的listAdapter doInBackground(无效…参数){
MemoDBHelper=新的MemoDBHelper(act);
//getAllDataByCategoryID
if(Categoryid!=Categoryid.Done\u ID)
arraymemo=helper.getAllTaskByCategory(Categoryid);
其他的
arraymemo=(ArrayList)helper.gatdoneMo();
myadapter=新的listAdapter(act,arraymemo);
如果(myadapter==null){
Toast.makeText(act,“无数据”,Toast.LENGTH_SHORT).show();
取消(真);
}
返回myadapter;
}
@凌驾
受保护的void onPostExecute(listAdapter结果){
开关(类别ID){
案件类别紧急\重要\身份证:
列表=(列表视图)((活动)法案)
.findViewById(R.id.紧急/重要列表);
打破
案件类别:紧急\次要\重要\ ID:
列表=(列表视图)((活动)法案)
.findViewById(R.id.紧急/不太重要/列表);
打破
案件类别不太紧急重要身份证:
列表=(列表视图)((活动)法案)
.findViewById(R.id.Less\u emergency\u important\u list);
打破
案件类别。既不是紧急案件,也不是重要案件:
列表=(列表视图)((活动)法案)
.findViewById(R.id.既非紧急也非重要列表);
打破
案例类别ID.Done\U ID:
列表=(列表视图)((活动)法案).findViewById(R.id.ArchiveList);
打破
}
list.setAdapter(结果);
this.listapp=结果;
}
公共listAdapter getlistAdapter(){
返回此.listapp;
}
}

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RQS_MoveTo) {
        if (resultCode == Result.RESULT_OK) {

            int id = data.getExtras().getInt("NEWCategoryID");
            MemoDBHelper helper = new MemoDBHelper(getActivity());
            final int[] myitemsid = getSelectedID();
            for (int j = 0; j < myitemsid.length; j++) {
                helper.updateCategory(myitemsid[j], id);

            }

            onResume();

        }
    }
}
列表中的每个备忘都有“完成”复选框。当用户选中并取消选中它时,会在数据库中自动更新备忘。(在自定义适配器中)

----------------------------
|   --                      |
|| |备忘录标题|
|   --                      |
----------------------------  
公共类listAdapter扩展BaseAdapter实现OnCheckedChangeListener{Context act;
数组列表;
Sparseboolean阵列mcheck;
int pos;
记忆助手;
公共listAdapter(上下文活动,ArrayList memoarray){
这个动作=活动;
this.memorarray=memorarray;
mcheck=newsparsebooleanarray(memorarray.size());
helper=新的MemoDBHelper(act);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回memorary.size();
}
@凌驾
公共备忘录项目(内部位置){
//TODO自动生成的方法存根
返回数组。获取(位置);
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回0;
}
公共类视图持有者{
文本视图标题;
//文本视图描述;
复选框chkstatus;
}
持票人;
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
pos=位置;
LayoutInflater in=((活动)act.getLayoutInflater();
if(convertView==null){
convertView=in.充气(R.layout.list_项,空);
它=新的viewHolder();
it.title=(TextView)convertView.findViewById(R.id.txt\u list\u title);
it.chkstatus=(复选框)convertView
.findviewbyd(R.id.chkStatusid);
convertView.setTag(it);
}否则{
it=(viewHolder)convertView.getTag();
}
it.title.setText(memorarray.get(position.GetTitle());
setChecked(memorary.get(position.GetSattus());
it.chkstatus.setOnCheckedChangeListener(this);
setTag(String.valueOf(memorary.get(position.GetID());
返回视图;
}
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
mcheck.put(Integer.valueOf((String)buttonView.getTag()),已检查);
helper.updateStatusByID(Integer.valueOf((String)buttonView.getTag()),
(被检查);
helper.close();
//db updatedt后,调用片段中的方法notifydatsetchanged!
UrgentImportant_frg.notifyAdapter();
}
}

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RQS_MoveTo) {
        if (resultCode == Result.RESULT_OK) {

            int id = data.getExtras().getInt("NEWCategoryID");
            MemoDBHelper helper = new MemoDBHelper(getActivity());
            final int[] myitemsid = getSelectedID();
            for (int j = 0; j < myitemsid.length; j++) {
                helper.updateCategory(myitemsid[j], id);

            }

            onResume();

        }
    }
}
适配器必须通知已更改的数据,并且列表不显示已完成的备忘。我不知道如何做! 我的第一个片段:

public class UrgentImportant_frg extends Fragment {
static listAdapter myadp;
ListView list;
// memo selectedmemo;
long[] checkid;
AsyncTaskDB asyn;
ArrayList<memo> selectedMemoArray;
final static int RQS_MoveTo = 10;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.urgentimportant_layout,
            container, false);
    return rootview;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    selectedMemoArray = new ArrayList<memo>();
    list.setMultiChoiceModeListener(new MultiChoiceModeListener() {

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

            // list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {

            mode.getMenuInflater().inflate(R.menu.list_select_menu, menu);
            /*
             * MenuInflater inflater = getActivity().getMenuInflater();
             * inflater.inflate(R.menu.list_select_menu, menu);
             */

            mode.setTitle("Select Items");
            return true;
        }

        @Override
        public boolean onActionItemClicked(final ActionMode mode,
                MenuItem item) {

            switch (item.getItemId()) {
            case R.id.deletemenu:

                final int[] myitemsid = getSelectedID();
                final MemoDBHelper helper = new MemoDBHelper(getActivity());
                AlertDialog.Builder myAlert = new AlertDialog.Builder(
                        getActivity());
                myAlert.setMessage(
                        "Are you sure to delete " + myitemsid.length
                                + " memo ?")
                        .setPositiveButton("yes", new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                                for (int j = 0; j < myitemsid.length; j++) {
                                    helper.deleteRow(myitemsid[j]);
                                    /*
                                     * if (j == myitemsid.length - 1) {
                                     * strid[j] = String
                                     * .valueOf(myitemsid[j]); } else {
                                     * strid[j] = String
                                     * .valueOf(myitemsid[j]) + ","; }
                                     */
                                }

                                mode.finish();
                                onResume();
                            }
                        }).setNegativeButton("no", new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                mode.finish();

                            }
                        });
                AlertDialog alert = myAlert.create();
                alert.show();
                // mode.finish();

                break;
            case R.id.MoveTomenu:

                // myadp.getItem(position);
                Intent i = new Intent(getActivity(),
                        MoveToCategory_act.class);
                i.putExtra("categoryid", CategoryID.Urgent_Imprtant_ID);
                startActivityForResult(i, RQS_MoveTo);
                mode.finish();
                break;
            }
            return true;
        }

        // get selected id to delete and move category

        @Override
        public void onItemCheckedStateChanged(ActionMode mode,
                int position, long id, boolean checked) {
            if (myadp == null) {
                myadp = asyn.getlistAdapter();
            }

            int p = ifMemoSelectedBefore(myadp.getItem(position));
            if (p != -1) {

                selectedMemoArray.remove(p);

            } else if (checked) {
                selectedMemoArray.add(myadp.getItem(position));

            }
            final int checkedCount = list.getCheckedItemCount();
            switch (checkedCount) {
            case 0:
                mode.setSubtitle(null);
                break;

            case 1:
                mode.setSubtitle("One Item Selected");
                break;
            default:
                mode.setSubtitle(checkedCount + " Item Selected");
                break;
            }
        }
    });

    getActivity().getActionBar().setSubtitle("subtitle");
}

public int ifMemoSelectedBefore(memo m) {
    return selectedMemoArray.indexOf(m);

}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onViewCreated(view, savedInstanceState);

    list = (ListView) view.findViewById(R.id.Urgent_Important_list);

    // -------------click item
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                int position, long arg3) {
            if (myadp == null) {
                myadp = asyn.getlistAdapter();
            }
            // Log.d("tag", myadp.getItem(position).GetTitle() + "");
            Intent nextintent = new Intent(getActivity(),
                    EditMemo_act.class);
            memo g = myadp.getItem(position);
            /*
             * MemoDBHelper helper = new MemoDBHelper(getActivity());
             * helper.updateStatusByID(g.GetID(), true);
             */
            nextintent.putExtra("editmemo", g);
            startActivity(nextintent);

        }
    });

}

@Override
public void onResume() {
    asyn = new AsyncTaskDB(getActivity(), CategoryID.Urgent_Imprtant_ID);
    asyn.execute();
    super.onResume();
}

public int[] getSelectedID() {
    int[] SelectedArray_ID = new int[selectedMemoArray.size()];
    for (int j = 0; j < selectedMemoArray.size(); j++) {

        SelectedArray_ID[j] = selectedMemoArray.get(j).GetID();
        // Log.d("id", selectedMemoArray.get(j).GetID() + "");

    }
    return SelectedArray_ID;
}
public class UrgentImportant\u frg扩展片段{
静态列表适配器myadp;
列表视图列表;
//备忘录选择emo;
长[]校验ID;
异步任务数据库asyn;
ArrayList SelectedMemorArray;
最终静态整数RQS_MoveTo=10;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.urgent重要的\u布局,
货柜(虚假);;
返回rootview;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
list.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE\u model);
selectedMemoArray=newArrayList();
list.setMultichoiceModelListener(新的MultichoiceModelListener(){
@凌驾
公共布尔onPrepareActionMode(操作模式,菜单){
返回true;
}
@凌驾
公共void onDestroyActionMode(ActionMode模式){
//list.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE\u model);
}
@凌驾
公共布尔onCreateActionMode(ActionMode模式,菜单){
mode.getMenuInflater().充气(R.menu.list\u select\u菜单,菜单);
/*
*MenuInflater充气器=getActivity()。getMenuInflater();
*充气机。充气(右菜单。列表\选择\菜单,菜单);
*/
mode.setTitle(
notifyDataSetChanged();