Ok so I’ve been trying to get an OnItemClickListener to retrieve values from list items. At the moment the click is being registered but the values aren’t coming through. Here’re the relevant parts of my code:
public class DiarySchedule extends ListActivity implements OnClickListener
{
private DiaryDataSource datasource;
private static final String TAG = "MAD Diary Schedule";
private String delTitle;
private String delDate;
private String delTime;
private String editTitle;
private String editDate;
private String editTime;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.diary_schedule);
datasource = new DiaryDataSource(this);
datasource.open();
List<DiaryEntry> values = datasource.getAllDiaryEntries();
DiaryScheduleAdapter adapter = new DiaryScheduleAdapter(this,values);
setListAdapter(adapter);
registerForContextMenu(getListView());
}
public class DiaryScheduleAdapter extends ArrayAdapter<DiaryEntry>
{
private LayoutInflater li;
public DiaryScheduleAdapter(Context context, List<DiaryEntry> values)
{
super(context, 0, values);
li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
DiaryEntry diaryEntry = getItem(position);
View v = convertView;
if ( v == null )
{
v = li.inflate(R.layout.diary_schedule, null);
}
TextView date = (TextView)v.findViewById(R.id.scheduleListDate);
String initialDate = diaryEntry.getDate();
String formattedDate = ConvertToDate(initialDate);
date.setText(formattedDate);
TextView link = (TextView)v.findViewById(R.id.scheduleListLink);
link.setText(" at ");
TextView time = (TextView)v.findViewById(R.id.scheduleListTime);
time.setText(diaryEntry.getTime());
TextView title = (TextView)v.findViewById(R.id.scheduleListTitle);
title.setText(diaryEntry.getTitle());
v.setOnClickListener(new OnItemClickListener(position));
return v;
}
}
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
new MenuInflater(getApplication()).inflate(R.menu.diary_menu, menu);
return (super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected (MenuItem item)
{
switch (item.getItemId())
{
case R.id.add:
Intent intent = new Intent(DiarySchedule.this, DiaryAddEntry.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.diary_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId())
{
case R.id.edit:
Intent editIntent = new Intent(DiarySchedule.this, DiaryEditEntry.class);
editTitle = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListTitle)).getText();
editDate = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListDate)).getText();
editDate = GetInfoConvertToDate(editDate);
editTime = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListTime)).getText();
editIntent.putExtra("title", editTitle);
editIntent.putExtra("date", editDate);
editIntent.putExtra("time", editTime);
startActivity(editIntent);
break;
case R.id.delete:
delTitle = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListTitle)).getText();
delDate = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListDate)).getText();
delDate = GetInfoConvertToDate(delDate);
delTime = (String) ((TextView) info.targetView.findViewById(R.id.scheduleListTime)).getText();
Log.v(TAG, "Hopefully title is: " + delTitle + " with date of " + delDate + " and time of " + delTime);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
break;
}
return super.onContextItemSelected(item);
}
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case DialogInterface.BUTTON_POSITIVE:
datasource.deleteDiaryEntry(delTitle, delDate, delTime);
// IN CASE NEED TO DELETE ALL DB ENTRIES UNCOMMENT THIS
// (AND COMMENT THE ABOVE METHOD)
//datasource.deleteAll();
Intent intent = new Intent(DiarySchedule.this, DiarySchedule.class);
startActivity(intent);
break;
case DialogInterface.BUTTON_NEGATIVE:
// No action taken
break;
}
}
};
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
}
private class OnItemClickListener implements OnClickListener
{
private int mPosition;
OnItemClickListener(int position)
{
mPosition = position;
}
@Override
public void onClick(View v)
{
Log.v(TAG, "onItemClick at position" + mPosition);
final String title = (String) ((TextView) findViewById(R.id.scheduleListTitle)).getText();
System.out.println("Title is: " + title);
String date = (String) ((TextView) findViewById(R.id.scheduleListDate)).getText();
date = GetInfoConvertToDate(date);
System.out.println("Date is: " + date);
final String time = (String) ((TextView) findViewById(R.id.scheduleListTime)).getText();
System.out.println("Time is: " + time);
Intent descIntent = new Intent(DiarySchedule.this, DiaryDetailed.class);
descIntent.putExtra("title", title);
descIntent.putExtra("date", date);
descIntent.putExtra("time", time);
startActivity(descIntent);
}
}
}
When debugging it reaches the OnItemClickListener OnClick method, go through it properly but just doesn’t pick up the values, which come out empty. Any ideas? Thanks
You are having multiple views with the same id (one on each row). When getting the value try replacing
with
Same thing for the other values you are trying to retrieve.