首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从片段向数据库中插入值时,ListView未更新

从片段向数据库中插入值时,ListView未更新
EN

Stack Overflow用户
提问于 2019-10-13 20:42:28
回答 1查看 100关注 0票数 0

我使用BottomSHeetDialogfragment创建了一个底表,在按下保存按钮后,我的底单上有两个文本框和一个名为保存按钮的按钮,我的数据成功插入到sqlite数据库后,我的主活动上有一个列表视图,当按下保存按钮时,数据成功插入数据库,但列表视图没有自动更新插入的值。

现在,我如何自动更新我的列表视图?

我的适配器类是...

代码语言:javascript
代码运行次数:0
运行
复制
public class MainListViewAdapter extends BaseAdapter {

    Context context;
    ArrayList<String> taskList;
    ArrayList<String> detailList;

    LayoutInflater layoutInflater;

    public MainListViewAdapter(Context context, ArrayList<String> taskList, ArrayList<String> detailList) {
        this.context = context;
        this.taskList = taskList;
        this.detailList = detailList;
    }

    @Override
    public int getCount() {
        return taskList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {

        if (convertView == null) {
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.main_activity_list_view, parent, false);
        }

        TextView tasktitleTv = convertView.findViewById(R.id.list_item_title_tv_id);
        TextView taskDetailsTv = convertView.findViewById(R.id.list_item_detail_tv_id);
        final CheckBox checkBox = convertView.findViewById(R.id.list_item_checkbox_id);

        convertView.setClickable(true);
        convertView.setFocusable(true);
        convertView.setBackgroundResource(android.R.drawable.menuitem_background);


        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, ""+position, Toast.LENGTH_SHORT).show();
            }
        });

        tasktitleTv.setText(taskList.get(position));
        taskDetailsTv.setText(detailList.get(position));


        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(context, "Checked", Toast.LENGTH_SHORT).show();
                    taskList.remove(position);
                    detailList.remove(position);
                    MainListViewAdapter.this.notifyDataSetChanged();
                } else {
                    return;
                }
                if (isChecked) {
                    buttonView.toggle();
                }
            }
        });

        return convertView;
    }
}

我的mainActivity.java类是

代码语言:javascript
代码运行次数:0
运行
复制
public class MainActivity extends AppCompatActivity {

    private TextView taskHeaderTv;
    public ListView mainListview;
    private MainListViewAdapter mainListViewAdapter;

    private FloatingActionButton floatingActionButton;
    private BottomAppBar bottomAppBar;

    private DataBaseHelper dataBaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        taskHeaderTv = findViewById(R.id.task_header_tv_id);
        floatingActionButton = findViewById(R.id.floating_action_button);
        bottomAppBar = findViewById(R.id.bottomAppBar);

        fabClick();
        bottomAppBarClick();

        // set list view content
        dataBaseHelper = new DataBaseHelper(this);
        ArrayList<String> taskList = dataBaseHelper.getAllTitle();
        ArrayList<String> detailList = dataBaseHelper.getALlDetails();

        mainListview = findViewById(R.id.main_activity_listview_id);
        mainListViewAdapter = new MainListViewAdapter(this, taskList, detailList);
        mainListview.setAdapter(mainListViewAdapter);

        mainListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, position, Toast.LENGTH_SHORT).show();
            }
        });

        mainListViewAdapter.notifyDataSetChanged();

    }
}

我的片段类是

代码语言:javascript
代码运行次数:0
运行
复制
public class ListItemInputFragment extends BottomSheetDialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle);
    }

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

        View view = inflater.inflate(R.layout.fragment_list_item_input, container, false);

        final EditText newTaskEt, detailsEt;
        TextView savBtn;
        newTaskEt = view.findViewById(R.id.new_task_et_id);
        detailsEt = view.findViewById(R.id.details_et_id);
        savBtn = view.findViewById(R.id.save_btn_id);

        savBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String title = newTaskEt.getText().toString();
                String detail = detailsEt.getText().toString();

                DataBaseHelper dataBaseHelper = new DataBaseHelper(getContext());
                long row = dataBaseHelper.insertData(title, detail);

                if (row == -1) {
                    Toast.makeText(getActivity().getBaseContext(), "Data not inserted", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity().getBaseContext(), "Data Inserted", Toast.LENGTH_SHORT).show();
                }

                dismiss();
            }
        });

        return view;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-13 21:31:35

由于onCreate只被称为已经创建的MainActivity (而不是在取消底盾之后),所以您可以在onResume中更新您的列表,该列表是在取消底盾之后调用的。

MainActivity

代码语言:javascript
代码运行次数:0
运行
复制
@Override
protected void onResume() {
    super.onResume();

    mainListViewAdapter.taskList = dataBaseHelper.getAllTitle();
    mainListViewAdapter.detailList = dataBaseHelper.getALlDetails();
    mainListViewAdapter.notifyDataSetChanged();
}

但是,我真的建议你去看看Android架构组件和房间。(https://developer.android.com/topic/libraries/architecture) MVVM (模型-视图-视图模型)与使用LiveData使您的生活变得更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58363676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档