[Android ListView onItemClick更改背景颜色时出现索引问题

问题描述 投票:0回答:1

我遇到问题并陷入困境。当我单击列表视图项时,我想更改背景色。我为此列表视图定制了适配器,我正在控制适配器上的项目点击。但是出现索引问题。

void loadData() //this method reusable. {
        listViewProductCollect.setAdapter(null);
        mOrderWithDetails = ProductCollectingListActivity.mOrderToSend;
        listViewProductCollect.setAdapter(new AdapterCollectingOrdersDetail(mOrderWithDetails, this));
        listViewProductCollect.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
                selectedIndex = i;// getting position for adapter.

在此getView方法中更改背景色。每个列表视图项的设计都是自定义可绘制的。 dataset.size =8。当我单击index = 4时,背景不会改变,但是,当我单击listview的第一个索引时,listview index = 4的背景也会改变。我尝试了许多解决方案,但无法解决。我可以帮忙吗?

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    OrderDetail dataModel = getItem(position);
    AdapterCollectingOrdersDetail.ViewHolder viewHolder;
    final View result;

    if (convertView == null) {

        viewHolder = new AdapterCollectingOrdersDetail.ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.row_list_collecting_detail, parent, false);

       int selectNew =  ProductCollectingDetailActivity.selectedIndex;
        if (selectNew >= 0 && selectNew <= dataSet.size()) {
            if (counter == selectNew) {
                convertView.getRootView().setBackgroundColor(R.drawable.row_selected_list_background);
                ProductCollectingDetailActivity.selectedIndex = -1;
            }
           counter++;
        }
java android android-listview listviewitem custom-adapter
1个回答
0
投票

尝试向代码中添加其他内容,并将背景色设置为其原始状态

@Override
public View getView(int position, View convertView, ViewGroup parent) {
OrderDetail dataModel = getItem(position);
AdapterCollectingOrdersDetail.ViewHolder viewHolder;
final View result;

if (convertView == null) {

    viewHolder = new AdapterCollectingOrdersDetail.ViewHolder();
    LayoutInflater inflater = LayoutInflater.from(getContext());
    convertView = inflater.inflate(R.layout.row_list_collecting_detail, parent, false);

   int selectNew =  ProductCollectingDetailActivity.selectedIndex;
    if (selectNew >= 0 && selectNew <= dataSet.size()) {
        if (counter == selectNew) {
            convertView.getRootView().setBackgroundColor(R.drawable.row_selected_list_background);
            ProductCollectingDetailActivity.selectedIndex = -1;
        }
else 
{
//reset here the background color of the cell
}
       counter++;
    }
© www.soinside.com 2019 - 2024. All rights reserved.