如何在创建的对话框中单击删除按钮时从sqlite数据库中删除listview项?

时间:2017-08-24 16:40:30

标签: java android sqlite

<!-- First finding which page is related to the survey. This is a bit odd but I couldn't find any other way!! -->
<t t-set="pages" t-value="dict((l.id, l.page_id.id) for l in user_input.user_input_line_ids).values()" />

<!-- Then print the score per each page -->
<t t-foreach='pages' t-as='p'>
    <t t-set="page_score" t-value="sum([(uil.quizz_mark or 0.0) if uil.page_id.id == p else 0.0 for uil in user_input.user_input_line_ids])" />
    <div> You scored <t t-esc="page_score" /> points in page <t t-esc="p" />.</div>
</t>

删除部分数据库助手:

package com.dharquissandas.budget;

import com.afollestad.materialdialogs.DialogAction; 
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.color.ColorChooserDialog;

import java.util.ArrayList;

import static android.R.attr.button;
import static android.R.attr.data;

public class tab3expense extends Fragment {

private static final String TAG = "tab3expense";
DatabaseHelper mDatabaseHelper;
private ListView mListView;
View rootView;
Cursor expensedata;

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

@Override
public void onActivityCreated( Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mListView = (ListView) rootView.findViewById(R.id.listViewexpense);
    mDatabaseHelper = new DatabaseHelper(getActivity());

    populateListView();
}

private void populateListView() {

    Log.d(TAG, "populateListView: Displaying data in the ListView.");
    expensedata = mDatabaseHelper.getexpenseData();
    SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1, expensedata, new String[]{DatabaseHelper.EXPENSE_AMOUNT}, new int[]{android.R.id.text1}, 0);
    mListView.setAdapter(sca);

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            int csrpos = expensedata.getPosition();
            expensedata.moveToPosition(i);
            displayNoteDate(
                    expensedata.getString(expensedata.getColumnIndex(DatabaseHelper.EXPENSE_NOTES)),
                    expensedata.getString(expensedata.getColumnIndex(DatabaseHelper.EXPENSE_DATE)));
            expensedata.moveToPosition(csrpos);
        }
    });
}



@Override
public void onDestroy() {
    super.onDestroy();
    expensedata.close();
}

public void displayNoteDate(String noteContent, String dateValue) {
        MaterialDialog.Builder builder= new MaterialDialog.Builder(getActivity())
            .title("Expense Information")
            .content("Note: "+noteContent+"\nDate: "+ dateValue)
            .positiveText("edit")
            .negativeText("delete")
            .neutralText("close")
            .onPositive(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    Toast.makeText(getActivity(),"EDIT",Toast.LENGTH_LONG).show();
                }
            })
            .onNeutral(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    Toast.makeText(getActivity(),"CLOSE",Toast.LENGTH_LONG).show();
                }
            })
            .onNegative(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    Toast.makeText(getActivity(),"DELETE",Toast.LENGTH_LONG).show();
                }
            });
            builder.show();
}

}

我创建了一个对话框,当单击特定列表视图项时,该对话框显示有关该值的额外信息。如您所见,我有一个删除按钮,但不知道如何调用删除功能。如果你可以帮助我提供我的代码,那将是很好的因为我对android编程相当新。我添加了更多代码,以便您可以告诉我该怎么做。

2 个答案:

答案 0 :(得分:0)

如果列表中的数据与SQL数据完全相同,则可以通过其ID删除它们。 我相信你在尝试删除该行/项之前标记列表行。 首先记录deletedRows变量,以便知道它所拥有的id /位置。如果它保持位置,您需要做的是使用该位置查询数据库并删除sqlite数据。

答案 1 :(得分:0)

您的问题的答案与您的问题无关。我希望这可以成为未来Stack Overflow读者的一个教训,他们愿意提问。

你花时间思考如何提出一个问题,说明你的删除工作原因,没有花时间去尝试,或者看看为什么它不起作用。

当被问到一个简单的问题(LOG)时,你立即产生了关键信息:Null Pointer Exception。

你可以谷歌那是什么(如果你不确定),但实质上,你试图访问一些没有任何意义的东西。日志中的错误消息甚至会提示您:

  

尝试在空对象引用上调用虚拟方法'android.text.Editable android.widget.EditText.getText()'

听起来令人困惑,但实际上它告诉你,你试图在 null 对象引用上访问getText()。 A.k.a。:你的mAmountExpense可能是空的。因此,您无法访问或使用它,因为它是null。它什么都没有。

为什么?

可能是因为你没有做findViewById()