0

長押しすると、このリストビューが各行のsqlite db _idを返すようにしようとしています。

ただし、この行

onItemLongClick(AdapterView<?> parent, View view, int position, long id)

IDの代わりにリスト内の「位置」を返しています。

私はアイデアを使い果たしました...誰かがAndroidの初心者を正しい方向に向けることができますか?

public class MySavedPlaces extends Activity {

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

    //Creating a List View
    ArrayList<String> listItems = new ArrayList<String>();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);
    final ListView mylist=(ListView) findViewById(android.R.id.list);
    mylist.setAdapter(adapter);

    String URL = "content://com.db.place/locations";
    Uri locations = Uri.parse(URL);
    Cursor c = getContentResolver().query(locations, null, null, null, "name");
    c.moveToFirst();

    if(c!=null){
    //If there are contents in the database
    do{
        String id=c.getString(c.getColumnIndex("_id"));
        String name=c.getString(c.getColumnIndex("name"));
        listItems.add(name);
        }while(c.moveToNext());
    }

    mylist.setOnItemLongClickListener(new OnItemLongClickListener() {
          @Override
          public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1);
            adapter.add("Navigate...");
            adapter.add("Delete");
            AlertDialog.Builder builder = new AlertDialog.Builder(MySavedPlaces.this);
            builder.setTitle("whatever title "+id+ " "+position+" "+view.getId());
            builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    Log.d( "AlertDialog", "Positive"+item );
                    // item is the list item number - Navigate == 0, Delete == 1
                }
            });

            AlertDialog alert = builder.create();
            alert.show();

            // Return true to consume the click event
            return true;
          }

        });
}
4

2 に答える 2

2

この値を保存していないようです:

 String id=c.getString(c.getColumnIndex("_id"));

ID、名前をプロパティとして持つオブジェクトのリストを作成し、それらの項目を ArrayList に格納して、ArrayList から項目を簡単に取得できるようにしてください。

これの代わりに:

    ArrayAdapter<String> adapter = 
new ArrayAdapter<String>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);

次のようなものを使用します。

    ArrayAdapter<DataBaseRowObject> adapter = 
new ArrayAdapter<DataBaseRowObject>(MySavedPlaces.this, android.R.layout.simple_list_item_1, listItems);

ItemLongClickListener でデータを取得するには:

DataBaseRowObject selected = listItems.get(position);
于 2013-09-27T00:04:33.163 に答える
0

問題は、リスト内のビューの数を取得する4つのメソッドを実装する必要があるリストアダプターにあると思います。特定のインデックス リストビューの子アイテムを取得します。膨張した子を取得し、最後に変更する必要があるインデックスを取得します。ほとんどの場合、データベースを使用せず、人々はリストビューインデックスを配置するだけだからです

于 2013-09-27T00:49:57.183 に答える