Android 未对整个视图调用OnClickListner
在我正在开发的Android应用程序上,我遇到了这种情况 在一个片段中,有一个ListView,其中包含使用自定义ArrayAdapter(名为ArrayAdapter\u ClientInput)的客户列表(存储在Customer\u InputOld类的实例中)。单行包含一个具有两个文本视图和七个几乎相同的文本视图的ViewFlipper 我在适配器中放置了一个ClickListner和一个TouchListner,因此在点击(和触摸)一行时,应用程序会做出一些事情。这是可行的,但这些事件不会在整行上触发 只有大约80%的行是“可点击的”,而最后一个textView不响应listner 说真的,我不知道该发布什么代码,因为我不知道问题出在哪里:我试图在点击视图本身时烤视图。getWidth(),但实际上宽度是1280 px,整个设备的宽度 单行使用此customer_row.xml充气Android 未对整个视图调用OnClickListner,android,listview,android-arrayadapter,onclicklistener,Android,Listview,Android Arrayadapter,Onclicklistener,在我正在开发的Android应用程序上,我遇到了这种情况 在一个片段中,有一个ListView,其中包含使用自定义ArrayAdapter(名为ArrayAdapter\u ClientInput)的客户列表(存储在Customer\u InputOld类的实例中)。单行包含一个具有两个文本视图和七个几乎相同的文本视图的ViewFlipper 我在适配器中放置了一个ClickListner和一个TouchListner,因此在点击(和触摸)一行时,应用程序会做出一些事情。这是可行的,但这些事件不
适配器代码如下所示:
public class ArrayAdapter_ClientiInput extends ArrayAdapter<CustomerInputOld> {
public EventLog.Event ImageTouched;
//public ListView customerListView;
private ArrayList<CustomerInputOld> list;
private Context context;
//this custom adapter receives an ArrayList of RowData objects.
//RowData is my class that represents the data for a single row and could be anything.
public ArrayAdapter_ClientiInput(Context context, int textViewResourceId, ArrayList<CustomerInputOld> rowDataList) {
//populate the local list with data.
super(context, textViewResourceId, rowDataList);
this.list = new ArrayList<CustomerInputOld>();
this.list.addAll(rowDataList);
this.context = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
//creating the ViewHolder we defined earlier.
ViewHolder_CustomerRow holder = new ViewHolder_CustomerRow();
//creating LayoutInflater for inflating the row layout.
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//inflating the row layout we defined earlier.
convertView = inflater.inflate(R.layout.customers_row, null);
//setting the views into the ViewHolder.
holder.title = (TextView) convertView.findViewById(R.id.ragioneSocialeViewList);
holder.capital = (TextView) convertView.findViewById(R.id.customerLogo);
holder.flipper = (ViewFlipper) convertView.findViewById(R.id.capitalViewFlipper);
//holder.line = (RelativeLayout) convertView.findViewById(R.id.customer_whole_row);
holder.canale = (TextView) convertView.findViewById(R.id.canaleViewList);
holder.solleciti = (TextView) convertView.findViewById(R.id.sollecitiViewList);
holder.email = (TextView) convertView.findViewById(R.id.emailViewList);
holder.tipo = (TextView) convertView.findViewById(R.id.tipoViewList);
holder.numero = (TextView) convertView.findViewById(R.id.telefonoViewList);
holder.ultimoOrdine = (TextView) convertView.findViewById(R.id.ultimoOrdineViewList);
//define an onClickListener for the CheckBox.
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(getContext(),Integer.toString(v.getWidth()),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getContext(), CustomerDetail.class);
intent.putExtra("name", list.get(position).getCompany());
getContext().startActivity(intent);
}
});
convertView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == android.view.MotionEvent.ACTION_DOWN) {
v.setBackgroundColor(0xFAAA);
} else if ( e.getAction() == android.view.MotionEvent.ACTION_UP ||
e.getAction() == android.view.MotionEvent.ACTION_CANCEL) {
isSelected(position, v);
}
//Ritorno false per permettere anche al OnClickListener di agire..
return false;
}
});
holder.flipper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CustomerListFragment.onRowIconClicked(position, (RelativeLayout) v.getParent(), (ViewFlipper) v, context);
}
});
//setting data into the the ViewHolder.
holder.title.setText(list.get(position).getCompany());
holder.capital.setText(list.get(position).getCompany().substring(0, 1).toUpperCase());
holder.capital.setBackgroundColor(list.get(position).getIconColor());
holder.canale.setText(list.get(position).getChannel());
holder.solleciti.setText(list.get(position).getReminders());
if (Integer.parseInt(list.get(position).getReminders()) >= 3)
holder.solleciti.setTextColor(0xffff0000);
holder.email.setText(list.get(position).getEmail());
holder.numero.setText("tel. " + list.get(position).number);
holder.ultimoOrdine.setText(new SimpleDateFormat("c d MMM ''yy").format(list.get(position).getLastOrderDate()));
if (list.get(position).getInvoiceCustomer() == null) {
if (list.get(position).getDeliveryCustomer() == null) {
holder.tipo.setText("F/S");
} else {
holder.tipo.setText("F");
}
} else {
holder.tipo.setText("S");
}
//modifiche nel caso in cui sia selezionato
if ( isSelected(position,convertView) ) {
holder.flipper.showNext();
}
//return the row view.
return convertView;
}
private boolean isSelected(int position, View v){
if (position == CustomerListFragment.customerSelected) {
v.setBackgroundColor(0xFFE6C86F);
return true;
} else {
v.setBackgroundColor(0xFFFFFFFF);
return false;
}
}
}
公共类ArrayAdapter\u客户端输入扩展了ArrayAdapter{
公共事件日志;
//公共列表视图customerListView;
私有数组列表;
私人语境;
//此自定义适配器接收RowData对象的ArrayList。
//RowData是我的类,它表示单行的数据,可以是任何数据。
公共ArrayAdapter_ClientInput(上下文上下文,int textViewResourceId,ArrayList rowDataList){
//用数据填充本地列表。
超级(上下文、textViewResourceId、rowDataList);
this.list=new ArrayList();
this.list.addAll(rowDataList);
this.context=上下文;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//创建前面定义的ViewHolder。
ViewHolder_CustomerRow holder=新的ViewHolder_CustomerRow();
//创建LayoutInflater以扩大行布局。
LayoutFlater充气器=(LayoutFlater)this.context.getSystemService(context.LAYOUT\u充气器\u服务);
//扩大我们前面定义的行布局。
convertView=充气机。充气(R.layout.customers\u行,空);
//将视图设置到ViewHolder中。
holder.title=(TextView)convertView.findViewById(R.id.ragionSocialeViewList);
holder.capital=(TextView)convertView.findViewById(R.id.customerLogo);
holder.flipper=(ViewFlipper)convertView.findViewById(R.id.CapitalViewLipper);
//holder.line=(RelativeLayout)convertView.findViewById(R.id.customer\u整行);
holder.canale=(TextView)convertView.findViewById(R.id.canaleViewList);
holder.solleciti=(TextView)convertView.findViewById(R.id.sollecitiViewList);
holder.email=(TextView)convertView.findViewById(R.id.emailViewList);
holder.tipo=(TextView)convertView.findViewById(R.id.tipoViewList);
holder.numero=(TextView)convertView.findViewById(R.id.telefonoViewList);
holder.ultimoOrdine=(TextView)convertView.findViewById(R.id.ultimoOrdineViewList);
//为复选框定义onClickListener。
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Toast.makeText(getContext(),Integer.toString(v.getWidth()),Toast.LENGTH_SHORT.show();
Intent Intent=新的Intent(getContext(),CustomerDetail.class);
intent.putExtra(“name”,list.get(position.getCompany());
getContext().startActivity(意图);
}
});
convertView.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件e){
if(e.getAction()==android.view.MotionEvent.ACTION\u DOWN){
v、 立根基色(0xFAAA);
}否则如果(e.getAction()==android.view.MotionEvent.ACTION\u UP||
e、 getAction()==android.view.MotionEvent.ACTION\u取消){
当选(职位五);
}
//Ritorno false Permittere anche al-OnClickListener di agire。。
返回false;
}
});
holder.flipper.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
CustomerListFragment.onRowIconClicked(位置,(相对位置)v.getParent(),(ViewFlipper)v,上下文);
}
});
//将数据设置到ViewHolder中。
holder.title.setText(list.get(position.getCompany());
holder.capital.setText(list.get(position.getCompany().substring(0,1.toUpperCase());
holder.capital.setBackgroundColor(list.get(position.getIconColor());
holder.canale.setText(list.get(position.getChannel());
holder.solleciti.setText(list.get(position.getmembers());
if(Integer.parseInt(list.get(position.getememblents())>=3)
holder.solleciti.setTextColor(0xffff0000);
holder.email.setText(list.get(position.getEmail());
holder.numero.setText(“电话”+列表.get(位置).number);
holder.ultimoOrdine.setText(新的SimpleDataFormat(“CDMMM”“yy”).format(list.get(position.getLastOrderDate());
if(list.get(position).getInvoiceCustomer()==null){
if(list.get(position).getDeliveryCustomer()==null){
持有人:tipo.SETEXT(“F/S”);
}否则{
持有人:tipo.SETEXT(“F”);
}
}否则{
持有人:tipo.setText(“S”);
}
//在cui sia selezionato对nel caso进行了修改
if(isSelected(位置、视图)){
holder.flipper.showNext();
}
//返回行视图。
返回视图;
}
选择专用布尔值(整数位置,视图v){
if(position==CustomerListFragment.customerSelected){
v、 立根基色(0xFFE6C86F);
返回true;
}否则{
v、 立根基色(0xFFFFFF);
返回false;
}
}
}
OP提供的解决方案
在最后一个文本视图中,我将,
public class ArrayAdapter_ClientiInput extends ArrayAdapter<CustomerInputOld> {
public EventLog.Event ImageTouched;
//public ListView customerListView;
private ArrayList<CustomerInputOld> list;
private Context context;
//this custom adapter receives an ArrayList of RowData objects.
//RowData is my class that represents the data for a single row and could be anything.
public ArrayAdapter_ClientiInput(Context context, int textViewResourceId, ArrayList<CustomerInputOld> rowDataList) {
//populate the local list with data.
super(context, textViewResourceId, rowDataList);
this.list = new ArrayList<CustomerInputOld>();
this.list.addAll(rowDataList);
this.context = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
//creating the ViewHolder we defined earlier.
ViewHolder_CustomerRow holder = new ViewHolder_CustomerRow();
//creating LayoutInflater for inflating the row layout.
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//inflating the row layout we defined earlier.
convertView = inflater.inflate(R.layout.customers_row, null);
//setting the views into the ViewHolder.
holder.title = (TextView) convertView.findViewById(R.id.ragioneSocialeViewList);
holder.capital = (TextView) convertView.findViewById(R.id.customerLogo);
holder.flipper = (ViewFlipper) convertView.findViewById(R.id.capitalViewFlipper);
//holder.line = (RelativeLayout) convertView.findViewById(R.id.customer_whole_row);
holder.canale = (TextView) convertView.findViewById(R.id.canaleViewList);
holder.solleciti = (TextView) convertView.findViewById(R.id.sollecitiViewList);
holder.email = (TextView) convertView.findViewById(R.id.emailViewList);
holder.tipo = (TextView) convertView.findViewById(R.id.tipoViewList);
holder.numero = (TextView) convertView.findViewById(R.id.telefonoViewList);
holder.ultimoOrdine = (TextView) convertView.findViewById(R.id.ultimoOrdineViewList);
//define an onClickListener for the CheckBox.
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(getContext(),Integer.toString(v.getWidth()),Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getContext(), CustomerDetail.class);
intent.putExtra("name", list.get(position).getCompany());
getContext().startActivity(intent);
}
});
convertView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == android.view.MotionEvent.ACTION_DOWN) {
v.setBackgroundColor(0xFAAA);
} else if ( e.getAction() == android.view.MotionEvent.ACTION_UP ||
e.getAction() == android.view.MotionEvent.ACTION_CANCEL) {
isSelected(position, v);
}
//Ritorno false per permettere anche al OnClickListener di agire..
return false;
}
});
holder.flipper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CustomerListFragment.onRowIconClicked(position, (RelativeLayout) v.getParent(), (ViewFlipper) v, context);
}
});
//setting data into the the ViewHolder.
holder.title.setText(list.get(position).getCompany());
holder.capital.setText(list.get(position).getCompany().substring(0, 1).toUpperCase());
holder.capital.setBackgroundColor(list.get(position).getIconColor());
holder.canale.setText(list.get(position).getChannel());
holder.solleciti.setText(list.get(position).getReminders());
if (Integer.parseInt(list.get(position).getReminders()) >= 3)
holder.solleciti.setTextColor(0xffff0000);
holder.email.setText(list.get(position).getEmail());
holder.numero.setText("tel. " + list.get(position).number);
holder.ultimoOrdine.setText(new SimpleDateFormat("c d MMM ''yy").format(list.get(position).getLastOrderDate()));
if (list.get(position).getInvoiceCustomer() == null) {
if (list.get(position).getDeliveryCustomer() == null) {
holder.tipo.setText("F/S");
} else {
holder.tipo.setText("F");
}
} else {
holder.tipo.setText("S");
}
//modifiche nel caso in cui sia selezionato
if ( isSelected(position,convertView) ) {
holder.flipper.showNext();
}
//return the row view.
return convertView;
}
private boolean isSelected(int position, View v){
if (position == CustomerListFragment.customerSelected) {
v.setBackgroundColor(0xFFE6C86F);
return true;
} else {
v.setBackgroundColor(0xFFFFFFFF);
return false;
}
}
}