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