2016-05-16 89 views
0

我和日历应用程序和基本工作思路背后的时候:我在特定日期添加事件的ListView和我想要做的是,当我点击当天ListView中的特定事件,OnClick方法将采取从数据库中事件的ID,并开始使用它新的活动。所以我需要将该ID传递给onClick方法。我发现类似的问题HERE,但不能完全理解我的情况。从数据库中获得物品的ID ListView项被点击

我有这个createBookings方法,它进入循环的每一天添加事件并返回当天事件列表。

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; 

} 

我会假设传递eventID这样就可以了:

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

,但我怎么得到它后,当onClickListener被称为列表视图?所有我设法做的是选择的项目的getText值..

 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(); 

     } 
    }); 

我的预订类:

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. 

我们得到id你可以用你的方法如下面

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'字符串的一个'ArrayList',所以这错误 –

+0

在那里你将数据添加到'mutableBookings'?并且何时调用'createBookings()'方法? –

0

您点击的listView中的项目有一个位置,这个位置与您传递给适配器(mutableBookings)的列表数组中的图书索引相同,但是如果列表第一项的位置值为1,那么你应该减1以获得可变预订列表中的索引值