【问题标题】:when implement linearlayout onclick listener in custom adapter , custom listview listSelector not work在自定义适配器中实现线性布局 onclick 侦听器时,自定义 listview listSelector 不起作用
【发布时间】:2014-02-21 12:16:29
【问题描述】:

在 PrdDocListAdapter 中实现 viewHolder._linearLayout.setOnClickListener 之前,listview 选择行颜色更改事件是有效的。但是在创建 onclick 侦听器后,选定的行颜色更改事件不起作用。请帮我清理一下。

这是 cashsaleolddoc.xml 的一部分

<ListView android:id="@+id/lvlOldDoc" android:fadingEdge="none" 
              android:layout_width="fill_parent" android:layout_height="200.0dip" 
              android:cacheColorHint="@android:color/transparent"  
              android:listSelector="@drawable/listview_selector"
              android:drawSelectorOnTop="true"
              android:choiceMode="singleChoice"                  
              android:layout_weight="1.0" 
            />

这是 listview_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<!-- Selected --> 
  <item 
android:state_focused="true" 
android:state_pressed="false" 
android:drawable="@color/Lime_Green" /> <!--  @drawable/tab_focus -->

  <!-- Pressed -->
  <item 
   android:state_pressed="true" 
 android:drawable="@color/Lime_Green" /> <!--  @drawable/tab_press -->

</selector> 

这是 PrdDocListAdapter

public class PrdDocListAdapter extends BaseAdapter {

private Context mContext;
private LayoutInflater inflater;
private List<CashSaleDocInfo> _CashSaleDocInfo;

public PrdDocListAdapter(Context paramContext,
        List<CashSaleDocInfo> paramList1) {
    this.mContext = paramContext;
    this._CashSaleDocInfo = paramList1;
}

@Override
public int getCount() {
    return _CashSaleDocInfo.size();
}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(final int position, View convertView,
        ViewGroup parentView) {
    inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    final ViewHolder viewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.cashsaleolddoclist, null);

        TextView txtOldDocNo = (TextView) convertView
                .findViewById(R.id.txtOldDocNo);
        TextView txtOldDocDate = (TextView) convertView
                .findViewById(R.id.txtOldDocDate);
        TextView txtOldDocCancelFlag = (TextView) convertView
                .findViewById(R.id.txtOldDocCancelFlag);
        TextView txtOldDocTable = (TextView) convertView
                .findViewById(R.id.txtOldDocTable);
        // EditText txtSelectDocNo = (EditText) convertView
        // .findViewById(R.id.txtSelectDocNo);

        viewHolder = new ViewHolder();
        viewHolder.txtDocNo = txtOldDocNo;
        viewHolder.txtDocDate = txtOldDocDate;
        viewHolder.txtCancelFlag = txtOldDocCancelFlag;
        viewHolder.txtTableNo = txtOldDocTable;
        // viewHolder.txtSelectDocNo = txtSelectDocNo;
        viewHolder._linearLayout = (LinearLayout) convertView
                .findViewById(R.id.linlayDocnoList);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.txtDocNo.setText(this._CashSaleDocInfo.get(position)
            .getDOCUMENT_NO());
    viewHolder.txtDocDate.setText(dateFormat.format(this._CashSaleDocInfo
            .get(position).getDOCUMENT_DATE()));
    viewHolder.txtCancelFlag.setText(this._CashSaleDocInfo.get(position)
            .getCANCEL_FLAG());
    viewHolder.txtTableNo.setText(this._CashSaleDocInfo.get(position)
            .getSALEMAN_CODE());


    viewHolder._linearLayout.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            String a = _CashSaleDocInfo.get(position).getDOCUMENT_NO()
                    .toString();
            MainActivity.setSelectDocNo(a);
        }
    });

    return convertView;
}

public static class ViewHolder {
    TextView txtDocNo;
    TextView txtDocDate;
    TextView txtCancelFlag;
    TextView txtTableNo;
    EditText txtSelectDocNo;
    LinearLayout _linearLayout;
}
}

【问题讨论】:

  • 为此你应该实现 ListView 的 onItemClick 事件。

标签: android android-listview onclicklistener custom-lists


【解决方案1】:

试试这个: 在LinearLayout中设置android:clickable="true"

【讨论】:

    【解决方案2】:

    我的自定义列表视图布局(cashsaleolddoclist.xml)是

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:orientation="vertical" android:background="@drawable/listview_selector" android:clickable="true" android:id="@+id/linlayDocnoList" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <LinearLayout android:orientation="horizontal" android:background="@color/White" android:layout_width="fill_parent" android:layout_height="fill_parent">
        <TextView android:textSize="14.0dip" android:textColor="#ff000000" android:id="@+id/txtOldDocNo" android:padding="5.0dip"  android:layout_marginLeft="2.0dip" android:layout_width="160.0dip" android:layout_height="wrap_content" android:text="" android:gravity="center" android:textAlignment="gravity" />
        <TextView android:textSize="14.0dip" android:textColor="#ff000000" android:id="@+id/txtOldDocDate" android:padding="5.0dip" android:layout_width="140.0dip"  android:layout_marginLeft="3.0dip"  android:layout_height="wrap_content" android:text="" android:gravity="center" android:textAlignment="gravity"/>
        <TextView android:textSize="14.0dip" android:textColor="#ff000000" android:id="@+id/txtOldDocCancelFlag" android:padding="5.0dip" android:layout_width="70.0dip"  android:layout_marginLeft="3.0dip"  android:layout_height="wrap_content" android:text="" android:gravity="center" android:textAlignment="gravity"/>
        <TextView android:textSize="14.0dip" android:textColor="#ff000000" android:id="@+id/txtOldDocTable" android:padding="5.0dip" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="" android:gravity="center" android:textAlignment="gravity"/>                
    </LinearLayout>
    <View android:background="#ff000000" android:layout_width="wrap_content" android:layout_height="1.0dip" />
    </LinearLayout>
    

    我找到了解决问题的方法。现在我删除了 cashsaleolddoclist.xml 中的第二个线性布局。然后 listselector 效果仍然有效。谢谢大家的回答

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多