Java 在自定义BaseAdapter中实现onClick侦听器

Java 在自定义BaseAdapter中实现onClick侦听器,java,android,android-sqlite,Java,Android,Android Sqlite,我有一个多栏的票证项目列表视图。我试图找出如何用我所写的实现onclick侦听器 Fragment_OpenTickets.java: public class Fragment_OpenTickets extends Fragment { ArrayList<HashMap<String, String>> ticketList = new ArrayList<HashMap<String, String>>(); @Override pub

我有一个多栏的票证项目列表视图。我试图找出如何用我所写的实现onclick侦听器

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;
}
}
公共类片段\u OpenTickets扩展片段{
ArrayList ticketList=新建ArrayList();
@凌驾
创建视图上的公共视图(更平坦的充气机,
视图组容器,捆绑包savedInstanceState){
Context=getActivity();
DBController dbc=新的DBController(上下文);
视图=充气机。充气(R.layout.fragment\u opentickets,container,false);
ListView=(ListView)view.findViewById(R.id.openList);
Cursor=dbc.getAllOpenTickets();
if(cursor.moveToFirst()){
做{
HashMap HashMap=新的HashMap();
int size=cursor.getColumnCount();
对于(int i=0;i
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;
}
}
公共类适配器\u OpenList扩展了BaseAdapter{
arraylistticketlist;
语境;
拉平机;
公共适配器_OpenList(ArrayList arr,Context c){
ticketList=arr;
上下文=c;
mInflater=(LayoutInflater)c.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回ticketList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回ticketList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.flate(R.layout.fragment\u openticket\u行,空);
holder=新的ViewHolder();
holder.txtTicketNo=(TextView)convertView.findViewById(R.id.row\u ticketNo);
holder.txtTicketDate=(TextView)convertView.findViewById(R.id.row\u ticketDate);
holder.txtrease=(TextView)convertView.findViewById(R.id.row_lease);
holder.txtdeliveloc=(TextView)convertView.findViewById(R.id.row\u deliveloc);
}否则{
holder=(ViewHolder)convertView.getTag();
}
HashMap map=ticketList.get(位置);
holder.txticketno.setText((CharSequence)map.get(“ticketNo”);
holder.txticketdate.setText((CharSequence)map.get(“ticketDate”);
holder.txtrease.setText((CharSequence)map.get(“lease”);
holder.txtdeliveloc.setText((CharSequence)map.get(“deliveloc”);
返回视图;
}
私有类视窗持有者{
TextView txtTicketNo;
TextView txtTicketDate;
文本视图txtrese;
TextView txtloc;
}
}
如果用户点击列表中的票证行,我需要获取票证的SQLite id来查看或启动票证。我知道有不同的方法可以做到这一点,但我只是想把基本知识记下来,这样我就可以玩了。谢谢

更新:
我通过使用Johan提供的代码并删除适配器使用的fragment\u openticket\u row.xml文件中的一个按钮来解决这个问题。它与onClick冲突。

一种简单的方法是在createView方法中创建ItemClickListener,如下所示:

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
        }
    });
listview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//在这里,您可以获得位置并访问您的
//TicketList对象
}
});

谢谢你,约翰,但我也在这条路上冒险了。让IDE接受代码的唯一方法是使用AdapterView,比如listView.setOnItemClickListener(新的AdapterView.OnItemClickListener()),然后在onItemClick方法中使用System.out.println(“测试”)只是为了看看它是否工作。我应该添加代码与AdapterView一起工作,但什么也没有发生。我必须手动导入import android.widget.AdapterView.OnItemClickListener;才能使代码工作。当我单击列表中的一行时,它仍然没有任何作用。我将代码放在dbc.close()上方的片段_OpenTickets.java中;能否尝试将上下文设置为视图。getContext();而不是getActivity();android.widget.AdapterView.OnItemClickListener是正确的导入。xml中是否有任何阻止视图?