简体   繁体   English

滚动列表视图时丢失项目背景颜色

[英]Lost item background color when scrolling listview

I tried to used any solutions from stackoverflow, but without succesfull. 我尝试使用stackoverflow中的任何解决方案,但没有成功。 So, I set background color to item after click - its working. 所以,我点击后将背景颜色设置为项目 - 它的工作。 After scrolling (when item is out off screen) and back scrolling (item is in screen), this item lost background color. 滚动(当项目离开屏幕时)和后滚动(项目在屏幕中)后,此项目丢失背景颜色。 Here is part of code: 这是代码的一部分:

public class RowAdapter extends ArrayAdapter<FileRow> {
private final Activity context;
private final List<FileRow> list;

public RowAdapter(Activity context, List<FileRow> list) {
    super(context, R.layout.browser_row, list);
    this.context = context;
    this.list = list;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);

        LayoutInflater inflator = context.getLayoutInflater();
        convertView = inflator.inflate(R.layout.browser_row, null);

        TextView textView = (TextView)convertView;
        textView.setText(list.get(position).GetName());
        if (!list.get(position).GetName().contains("/")) {
            textView.setPadding(5, 5, 5, 5);
            textView.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);      
        }
        for (int i=0; i<BrowserFiles.selectedItems.size(); i++) {
            if (BrowserFiles.selectedItems.get(i).GetPosition() == position) {
                v.setBackgroundColor(Color.rgb(255, 165, 0));
                break;
            }
        }

    return convertView;
}

} }

public class BrowserFiles extends ListActivity implements OnItemClickListener {

private String lastDir = "/";
private List<FileRow> items = null;
public static List<FileRow> selectedItems;  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.browser_files);     
    ListView lv = (ListView) findViewById(android.R.id.list);
    lv.setOnItemClickListener(this);
    Intent i = getIntent();
    lastDir = i.getStringExtra("lastDir");

    getDir(lastDir);
    selectedItems = new ArrayList<FileRow>();
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    TextView tv = (TextView)view;
    //jedna se o soubor
    if (tv.getText().toString().toLowerCase(Locale.ENGLISH).endsWith("mp3")) {
        String item = lastDir + tv.getText().toString();

        int isInList = -1;
        for (int i=0; i < selectedItems.size(); i++) {
            if (selectedItems.get(i).GetName().compareToIgnoreCase(item) == 0) {
                isInList = i;
                break;
            }
        }

        if (isInList != -1) {
            selectedItems.get(isInList).SetSelected(false);
            selectedItems.remove(isInList);
            parent.getChildAt(position).setSelected(false);
            parent.getChildAt(position).setBackgroundColor(Color.TRANSPARENT);
        }
        else {
            selectedItems.add(new FileRow(item, true, position));
            parent.getChildAt(position).setSelected(true);              
            parent.getChildAt(position).setBackgroundColor(Color.rgb(255, 165, 0));
        }                       
    }
    //jedna se o adresar
    else {
        getDir(lastDir.compareTo("/") == 0 ? lastDir + tv.getText().toString() : lastDir + "/" + tv.getText().toString());
    }    
}

In the short term you can add this line: 在短期内,您可以添加以下行:

    for (int i=0; i<BrowserFiles.selectedItems.size(); i++) {
        if (BrowserFiles.selectedItems.get(i).GetPosition() == position) {
            v.getBackground().mutate(); // <=======
            v.setBackgroundColor(Color.rgb(255, 165, 0));
            break;
        }
    }

For some explanation you can look at the answer in this post 对于一些解释,你可以看看答案在这个岗位

On the long term you might want to optimize your getView() for speed. 从长远来看,您可能希望优化getView()以提高速度。
This is a very good training video you can watch 这是一个非常好的培训视频,你可以看

I found solutions. 我找到了解决方案 Just add two lines: 只需添加两行:

for (int i=0; i<BrowserFiles.selectedItems.size(); i++) {
            if (BrowserFiles.selectedItems.get(i).GetPosition() == position) {

                v.setBackgroundColor(Color.rgb(255, 165, 0));
                if (convertView != null)
                    convertView.setBackgroundColor(Color.rgb(255, 165, 0));
                break;
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM