2016-05-16 15 views
0

私は、カレンダーアプリケーションと基本的にはこの背後にあるアイデアを使って作業しています。特定の日付に追加されたイベントのListViewがあります。 ListViewで特定のイベントが発生した場合、onClickメソッドはそのイベントのIDをデータベースから取得し、そのイベントで新しいアクティビティを開始します。だから、そのIDをonClickメソッドに渡す必要があります。私は同様の問題HEREを見つけましたが、私の場合はそれほど理解できません。ListViewアイテムがクリックされたときにデータベースからアイテムのIDを取得する

私はこのcreateBookingsメソッドを持っています。それは、イベントが追加され、その日のイベントのリストを返す毎日のループに入ります。

Booking event = new Booking(eventID,color+" "+eventTitle+" "+start_time, data);

しかしonClickListenerは、リストビューのために呼び出されたときにどのように私は後でそれを得るのです。私はこのようなeventIDを渡す引き受ける

public List<Booking> createBookings(Date data) { 
     if(data!=null) { 
     ..... 
ArrayList<Booking> events = new ArrayList<>(); 
      if (c.moveToFirst()) { 
       do { 
       Integer eventID; 
       String eventTitle, start_date, start_time, end_date, color; 
       eventID = c.getInt(0); 
       eventTitle = c.getString(1);start_time = c.getString(4); color = "•"+c.getString(7); 

       if(eventTitle.isEmpty())eventTitle="(no title)"; 
       Booking event = new Booking(eventID,color+" "+eventTitle+" "+start_time, data); 
       events.add(event); 
       } while (c.moveToNext()); 
       } 
     return events; 

} 

は大丈夫でしょうか?私がやって管理されるすべての

 final List<String> mutableBookings = new ArrayList<>(); 
     final ListView bookingsListView = (ListView) findViewById(R.id.bookings_listview); 
     final ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mutableBookings); 
    bookingsListView.setAdapter(adapter); 
    bookingsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> bookingsListView, View view, 
           int position, long id) { 
      String item = ((TextView)view).getText().toString(); 
      Toast.makeText(getApplicationContext()," "+item, Toast.LENGTH_SHORT).show(); 

     } 
    }); 

マイブッキングクラス..選択した項目ののgetText値である:

public class Booking { 
    private Integer id; 
    private String title; 
    private Date date; 

    public Booking(Integer id, String title, Date date) { 
     this.id = id; 
     this.title = title; 
     this.date = date; 
    } 

//lets say I had this method here.. would it return the correct event id 
//when called in onClickListener above? 

    public String getBookingId() { 
     return ""+id; 
    } 
} 

答えて

0

はい、あなたのモデルクラスに書かれている方法は、あなたにクリックしたオブジェクトのIDを返します。しかし、そのためにあなたはそう何を行うことができますが、あなたのonItemClick()メソッド内を取得するために今すぐ

Booking booking = mutableBookings.get(position); // This will return you the object. 

以下のようなあなたのオブジェクトを取得され、最初のオブジェクトを取得する必要がありますあなたは、以下の

String id = booking.getBookingId(); // Now you can use this as per your needs 

のようなあなたの方法を使用することができますし、そう私はあなたのモデルクラスにint代わりのIntegerを使用することをお勧めしたいと思います。

+0

'onItemClick()'に 'booking booking = mutableBookings.get(position);'を入力すると、エラーが発生します: '必須:mypackagename .MainActivity.Booking 見つかった:java.lang.String' – Rimvydas

+0

ああ、私は 'mutableBookings'が' Booking'クラスの 'ArrayList'でしたが、Stringの' ArrayList'だと思いました。エラー –

+0

'mutableBookings'にデータを追加しますか? 'createBookings()'メソッドはいつ呼ばれますか? –

0

あなたがクリックしたリストビューの項目には位置があります。この位置は、アダプタに渡したリスト配列のブックインデックス(mutableBookings)と同じですが、リストの最初の項目の位置値が1の場合、1を引いてmutablebookingsリストのインデックス値を取得する

関連する問題