お世話になっております。Android開発初心者です。
リストビュー項目が削除出来ません。
ビルド後、リストビュー項目を長押しした際、一瞬のみ、項目がリストから消えますが、その後すぐにまた復活して、項目を短く押した際にインテントで遷移する次の項目の詳細画面に処理が進み、長押しした項目自体も削除されておりません。
以下が私のコードです。
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.ListView;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class complist extends Activity {
private /*丙プロジェクトとアプリ名*/SimpleDatabaseHelper_bo1 helper = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.complist_layout); Integer pcontentid = 0; String ptime = null; String pname = null; String stringid = null; if (helper == null) { helper = new SimpleDatabaseHelper_bo1(complist.this); } final ArrayList<HashMap<String, String>> datalist1 = new ArrayList();
// ArrayList datalist1 = new ArrayList();
SQLiteDatabase db1 = helper.getReadableDatabase(); try { Cursor c3 = db1.rawQuery("SELECT * FROM "/*丙データベーステーブル名*/", null); boolean next = c3.moveToFirst(); while (next) { HashMap<String, String> data = new HashMap<>(); pcontentid = c3.getInt(0); ptime = c3.getString(1); pname = c3.getString(2); stringid = String.valueOf(pcontentid); data.put("ID", stringid); data.put("Time", ptime); data.put("Subject",pname); datalist1.add(data); next = c3.moveToNext(); } c3.close(); }catch (Exception e){ TextView error = (TextView)findViewById(R.id.textview_error); error.setText(getString(R.string.not_yet)); } finally { db1.close(); } final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, datalist1); final ListView listView1 = (ListView) findViewById(R.id.listview1); listView1.setAdapter(adapter); listView1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<? >parent, View view, int position, long id){ /* HashMap<String, String> map1 = (HashMap<String, String>)listView1.parentAdapter.getItemAtPosition(position); String value1 = map1.get("ID"); String value2 = map1.get("Time"); String value3 = map1.get("Subject"); try { String item = (String)map1.get(position); }catch (Exception e){ } */ String item1 = (String)parent.getItemAtPosition(position) ; datalist1.remove(item1); adapter.notifyDataSetChanged(); return false; } }); listView1.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> av, View view, int position, long id){ String get_id2 = String.valueOf(id + 1); Intent intent4 = new Intent(complist.this, user.win.hope.a_box_to_complain.compdisp.class); intent4.putExtra("did2",get_id2); startActivity(intent4); } }); }
}
項目を削除する前にダイアログも表示させたいのですが、項目自体が削除されないので、次に進めずにとても困っております。
もし、解決方法がお解りでいらっしゃいましたら、ご教授の程、宜しくお願い申し上げます。
追伸
今回のArraylistの項目にデータベースのデータを使用しており、短いクリックで項目の詳細画面にIntentしているのですが、その詳細画面で再び、データベースを開いて各々のデータを表示しております。
ただのlistなら、adapter.removeで削除出来ても、データベースのデータを使う場合は、データベース自体のカラムも削除しなければならないのでしょうか…?
2019/10/10 PM12:40頃
長押しで押されたitemを取得するときに、エラーで型が違うと表示されます。
HashMapを使っているので、keyとvalueの2つが必要なのに、無理やりStringでキャストしておりましたので、そこが問題でしょうか…?
現在、HashMapを使用せずにデータベースから項目のみ取得してリストビューに渡せるかどうか、試しております。
String item = (String)adapter.getItem(position)
のitemは「never used」と警告が出ております。
2019/10/10 PM13:25頃
HashMapを使わないで試してみましたが、うまくいきませんでした。
itemにデータが入ってきてないのは、間違ったキャストをしているからですよね…?
キャストのExceptionがlogcatで出ておりますので、データのキャストをどうすれば良いのか、もし、お解りでいらっしゃいましたら、ご教授の程、お願い申し上げたい次第です。
回答2件
あなたの回答
tips
プレビュー