У меня есть список видов билетов с несколькими столбцами. Я пытаюсь понять, как реализовать прослушиватель onclick с тем, что я написал.Реализовать onClick Listener в пользовательском базовом адаптере
Fragment_OpenTickets.java:
public class Fragment_OpenTickets extends Fragment {
ArrayList<HashMap<String, String>> ticketList = new ArrayList<HashMap<String, String>>();
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
Context context = getActivity();
DBController dbc = new DBController(context);
View view = inflater.inflate(R.layout.fragment_opentickets, container, false);
ListView listView = (ListView) view.findViewById(R.id.openList);
Cursor cursor = dbc.getAllOpenTickets();
if (cursor.moveToFirst()) {
do {
HashMap<String, String> hashMap = new HashMap<String, String>();
int size = cursor.getColumnCount();
for (int i = 0; i < size; i++) {
hashMap.put(cursor.getColumnName(i), cursor.getString(i));
}
ticketList.add(hashMap);
} while (cursor.moveToNext());
}
Adapter_OpenList adapter = new Adapter_OpenList(ticketList, context);
listView.setAdapter(adapter);
dbc.close();
return view;
}
}
Adapter_OpenList.java:
public class Adapter_OpenList extends BaseAdapter {
ArrayList<HashMap<String, String>> ticketList;
Context context;
LayoutInflater mInflater;
public Adapter_OpenList(ArrayList<HashMap<String, String>> arr, Context c){
ticketList = arr;
context = c;
mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return ticketList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return ticketList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
convertView = mInflater.inflate(R.layout.fragment_openticket_row, null);
holder = new ViewHolder();
holder.txtTicketNo = (TextView)convertView.findViewById(R.id.row_ticketNo);
holder.txtTicketDate = (TextView)convertView.findViewById(R.id.row_ticketDate);
holder.txtLease = (TextView)convertView.findViewById(R.id.row_lease);
holder.txtDelivLoc = (TextView)convertView.findViewById(R.id.row_delivLoc);
} else {
holder = (ViewHolder) convertView.getTag();
}
HashMap map = ticketList.get(position);
holder.txtTicketNo.setText((CharSequence) map.get("ticketNo"));
holder.txtTicketDate.setText((CharSequence) map.get("ticketDate"));
holder.txtLease.setText((CharSequence) map.get("lease"));
holder.txtDelivLoc.setText((CharSequence) map.get("delivLoc"));
return convertView;
}
private class ViewHolder {
TextView txtTicketNo;
TextView txtTicketDate;
TextView txtLease;
TextView txtDelivLoc;
}
}
Если пользователь нажимает на строку билета в списке мне нужно, чтобы получить SQLite идентификатор билета либо видом это или запустите билет. Я знаю, что есть разные способы сделать это, но я просто пытаюсь ослабить основы, чтобы я мог играть с ним. Благодаря!
UPDATE: Я решил эту проблему с помощью кода, предоставленного Юхана и удаления кнопки я имел в fragment_openticket_row.xml файл адаптер использует. Это противоречило с onClick.
Спасибо, Йохан, но я решился на этот путь тоже. Единственный способ заставить IDE принять код - использовать AdapterView, например listView.setOnItemClickListener (новый AdapterView.OnItemClickListener(). Затем в методе onItemClick я использую System.out.println («TEST»), чтобы увидеть, –
Я должен был добавить, что код работает с AdapterView, но ничего не происходит. –
он должен работать ... где вы поместили код? –