2015-02-14 3 views
0

У меня есть список видов билетов с несколькими столбцами. Я пытаюсь понять, как реализовать прослушиватель 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.

ответ

1

Простой подход заключается в создании ItemClickListener в методе CreateView так:

listview.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 
      //Here you can get the position and access your 
      //TicketList Object 
     } 
    }); 
+0

Спасибо, Йохан, но я решился на этот путь тоже. Единственный способ заставить IDE принять код - использовать AdapterView, например listView.setOnItemClickListener (новый AdapterView.OnItemClickListener(). Затем в методе onItemClick я использую System.out.println («TEST»), чтобы увидеть, –

+0

Я должен был добавить, что код работает с AdapterView, но ничего не происходит. –

+0

он должен работать ... где вы поместили код? –

Смежные вопросы