Android-在片段中的listview内的适配器中单击按钮不起作用

Android-在片段中的listview内的适配器中单击按钮不起作用,android,android-layout,onclicklistener,Android,Android Layout,Onclicklistener,我希望我的标题有意义,基本上我在一个listview中有一个按钮,一个布局,作为一个片段中listview中的适配器 我的问题是,当我在fragment类中声明onClick方法deleteQuote(视图v)时,无法识别它。它错误地指出了在主活动中找不到的内容。所以我把它转移到主活动中,但问题是我需要view标记通过getTag在条目中获取主键,以删除数据库和listview适配器中的条目。我应该把onClick方法放在哪里,在哪里我仍然可以得到视图标记,或者实现setonclickliste

我希望我的标题有意义,基本上我在一个listview中有一个按钮,一个布局,作为一个片段中listview中的适配器

我的问题是,当我在fragment类中声明onClick方法deleteQuote(视图v)时,无法识别它。它错误地指出了在主活动中找不到的内容。所以我把它转移到主活动中,但问题是我需要view标记通过getTag在条目中获取主键,以删除数据库和listview适配器中的条目。我应该把onClick方法放在哪里,在哪里我仍然可以得到视图标记,或者实现setonclicklisteners的最佳方法是什么

片段类

public class QuotationList extends Fragment{

ListView lvQuotationsMotorcar;
ArrayList<Quotation> menuList_motorcar;
CustomMotorcarQuoteAdapter cmqa;

ListView lvQuotationsFire;
ArrayList<Quotation> menuList_fire;
CustomFireQuoteAdapter cfqa;

Button btnDeleteQuote_motorcar;

Spinner spQuotationType;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.fragment_online_quotation_list, container, false);

    lvQuotationsMotorcar = (ListView) rootView.findViewById(R.id.lvQuotationsMotorcar);
    menuList_motorcar = new ArrayList<Quotation>();
    cmqa = new CustomMotorcarQuoteAdapter(getActivity(), R.layout.motorcarquotationlayout, menuList_motorcar);
    lvQuotationsMotorcar.setAdapter(cmqa);

    lvQuotationsFire = (ListView) rootView.findViewById(R.id.lvQuotationsFire);
    menuList_fire = new ArrayList<Quotation>();
    cfqa = new CustomFireQuoteAdapter(getActivity(), R.layout.firequotationlayout, menuList_fire);
    lvQuotationsFire.setAdapter(cfqa);

    final SQLiteDatabase mydatabase = getActivity().openOrCreateDatabase("INLIS", Context.MODE_PRIVATE, null);
    spQuotationType = (Spinner) rootView.findViewById(R.id.spQuotationType);
    btnDeleteQuote_motorcar = (Button) getActivity().findViewById(R.id.btnDeleteMotorcarQuote);

    Cursor resultSet = mydatabase.rawQuery("Select * from QuotationMotorcar", null);
    if (resultSet != null){
        if (resultSet .moveToFirst()) {
            while (!resultSet.isAfterLast()) {
               //stuff
                cmqa.add(q);
                resultSet.moveToNext();
            }
        }

    }else{
        Toast.makeText(getActivity(), "No Pending Motorcar Quotations", Toast.LENGTH_LONG).show();
    }

    Cursor resultSet1 = mydatabase.rawQuery("Select * from QuotationFire", null);

    if (resultSet1 != null){
        if (resultSet1 .moveToFirst()) {
            while (!resultSet1.isAfterLast()) {
               //stuff
                cfqa.add(q);
                resultSet1.moveToNext();

            }

        }

    }else{
        Toast.makeText(getActivity(), "No Pending Fire Quotations", Toast.LENGTH_LONG).show();
    }

    mydatabase.close();


    //more code

    return rootView;
}
如果它只是扩展了一个activity类,那么它的效果非常好。希望有人能帮忙。我真的很恼火这个onClick不能处理片段


如何以及在何处声明可以使用视图标记正确调用的方法?

在自定义适配器
getView
方法中使用此
OnClickListener
声明

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.your_lv_item_layout, parent, false);
    view.findViewById(R.id.your_bt).setOnClickListener(new View.OnClickListener(){
         @Override
         public void onClick(View arg0) {
            //do what ever you want
         }
    });

    return view;
  }

对于处理行,您可以使用listview.setonitemclick而不是在内部设置onclick,而不是使用listview.setonitemclickadapter@AjayPandya但是我在布局条目中有另一个按钮,它也需要标记。另一个获取视图标记并将其发送到数据库服务器。在我的示例中,我刚刚展示了1,它是delete部分,人们可以从中获得点。从这里可以调用delete方法
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.your_lv_item_layout, parent, false);
    view.findViewById(R.id.your_bt).setOnClickListener(new View.OnClickListener(){
         @Override
         public void onClick(View arg0) {
            //do what ever you want
         }
    });

    return view;
  }