Android 无法在listview中获得正确的位置
当我试图改变列表视图中位置1的背景色时,位置1和位置5的背景色都会改变Android 无法在listview中获得正确的位置,android,Android,当我试图改变列表视图中位置1的背景色时,位置1和位置5的背景色都会改变 public class MyAdapter extends ArrayAdapter<Item> { private final Context context; private final ArrayList<Item> itemsArrayList; static class ViewHolder { TextView textday; TextView text1;
public class MyAdapter extends ArrayAdapter<Item> {
private final Context context;
private final ArrayList<Item> itemsArrayList;
static class ViewHolder {
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
public MyAdapter(Context context, ArrayList<Item> itemsArrayList) {
super(context, R.layout.list_row, itemsArrayList);
this.context = context;
this.itemsArrayList = itemsArrayList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.list_row, parent, false);
viewHolder = new ViewHolder();
viewHolder.textday = (TextView)convertView.findViewById(R.id.w1);
viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1);
viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2);
viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position).getTitle());
viewHolder.text2.setText(itemsArrayList.get(position).getDescription());
viewHolder.text3.setText(itemsArrayList.get(position).getthird());
viewHolder.textday.setText(itemsArrayList.get(position).getDay());
viewHolder = (ViewHolder)convertView.getTag();
if(position == 1 )
{
convertView.setBackgroundColor(Color.parseColor("#00796b"));
viewHolder.text1.setTextColor(Color.parseColor("#ffffff"));
viewHolder.text2.setTextColor(Color.parseColor("#ffffff"));
viewHolder.text3.setTextColor(Color.parseColor("#ffffff"));
}
return convertView;
}
}
公共类MyAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终阵列列表项阵列列表;
静态类视窗夹{
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
公共MyAdapter(上下文上下文,ArrayList itemsArrayList){
super(上下文,R.layout.list_行,itemsArrayList);
this.context=上下文;
this.itemsArrayList=itemsArrayList;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(R.layout.list_行,父项,false);
viewHolder=新的viewHolder();
viewHolder.textday=(TextView)convertView.findViewById(R.id.w1);
viewHolder.text1=(TextView)convertView.findViewById(R.id.l1);
viewHolder.text2=(TextView)convertView.findViewById(R.id.l2);
viewHolder.text3=(TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position.getTitle());
viewHolder.text2.setText(itemsArrayList.get(position.getDescription());
viewHolder.text3.setText(itemsArrayList.get(position.getthird());
viewHolder.textday.setText(itemsArrayList.get(position.getDay());
viewHolder=(viewHolder)convertView.getTag();
如果(位置==1)
{
convertView.setBackgroundColor(Color.parseColor(#00796b));
viewHolder.text1.setTextColor(Color.parseColor(“#ffffff”));
viewHolder.text2.setTextColor(Color.parseColor(“#ffffffff”);
viewHolder.text3.setTextColor(Color.parseColor(“#ffffffff”);
}
返回视图;
}
}
将此方法放入适配器类中
@Override
public int getViewTypeCount() {
return YourList.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
我已经更改了你的代码。如果它不起作用,请告诉我。但不工作的机会最少
public class MyAdapter extends ArrayAdapter<Item> {
private final Context context;
private final ArrayList<Item> itemsArrayList;
static class ViewHolder {
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
public MyAdapter(Context context, ArrayList<Item> itemsArrayList) {
super(context, R.layout.list_row, itemsArrayList);
this.context = context;
this.itemsArrayList = itemsArrayList;
}
@Override
public int getCount() {
return itemsArrayList.size();
}
@Override
public Object getItem(int location) {
return itemsArrayList.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.list_row, parent, false);
viewHolder = new ViewHolder();
viewHolder.textday = (TextView)convertView.findViewById(R.id.w1);
viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1);
viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2);
viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position).getTitle());
viewHolder.text2.setText(itemsArrayList.get(position).getDescription());
viewHolder.text3.setText(itemsArrayList.get(position).getthird());
viewHolder.textday.setText(itemsArrayList.get(position).getDay());
/* no need again access viewHolder over here you already done this part viewHolder = (ViewHolder)convertView.getTag(); so remove this part*/
if(position == 1 )
{
convertView.setBackgroundColor(Color.parseColor("#00796b"));
viewHolder.text1.setTextColor(Color.parseColor("#ffffff"));
viewHolder.text2.setTextColor(Color.parseColor("#ffffff"));
viewHolder.text3.setTextColor(Color.parseColor("#ffffff"));
}else{
//add this additional code to change old color if position is not equal to zero.
convertView.setBackgroundColor(Color.parseColor("replaceColorCode"));
viewHolder.text1.setTextColor(Color.parseColor("replaceColorCode"));
viewHolder.text2.setTextColor(Color.parseColor("replaceColorCode"));
viewHolder.text3.setTextColor(Color.parseColor("replaceColorCode"));
}
return convertView;
}
}
公共类MyAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终阵列列表项阵列列表;
静态类视窗夹{
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
公共MyAdapter(上下文上下文,ArrayList itemsArrayList){
super(上下文,R.layout.list_行,itemsArrayList);
this.context=上下文;
this.itemsArrayList=itemsArrayList;
}
@凌驾
public int getCount(){
return itemsArrayList.size();
}
@凌驾
公共对象getItem(int位置){
returnitemsarraylist.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(R.layout.list_行,父项,false);
viewHolder=新的viewHolder();
viewHolder.textday=(TextView)convertView.findViewById(R.id.w1);
viewHolder.text1=(TextView)convertView.findViewById(R.id.l1);
viewHolder.text2=(TextView)convertView.findViewById(R.id.l2);
viewHolder.text3=(TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position.getTitle());
viewHolder.text2.setText(itemsArrayList.get(position.getDescription());
viewHolder.text3.setText(itemsArrayList.get(position.getthird());
viewHolder.textday.setText(itemsArrayList.get(position.getDay());
/*无需再次访问此处的viewHolder您已完成此部分viewHolder=(viewHolder)convertView.getTag();因此请删除此部分*/
如果(位置==1)
{
convertView.setBackgroundColor(Color.parseColor(#00796b));
viewHolder.text1.setTextColor(Color.parseColor(“#ffffff”));
viewHolder.text2.setTextColor(Color.parseColor(“#ffffffff”);
viewHolder.text3.setTextColor(Color.parseColor(“#ffffffff”);
}否则{
//如果位置不等于零,则添加此附加代码以更改旧颜色。
convertView.setBackgroundColor(Color.parseColor(“replaceColorCode”);
viewHolder.text1.setTextColor(Color.parseColor(“replaceColorCode”);
viewHolder.text2.setTextColor(Color.parseColor(“replaceColorCode”);
viewHolder.text3.setTextColor(Color.parseColor(“replaceColorCode”);
}
返回视图;
}
}
显然if(position==1)
也应该有else
部分。你应该在那里设置默认颜色。是的,但是问题出现了,因为我使用了viewholder。在使用viewholder之前,它正在工作。我使用viewholder使列表视图平滑地滚动:)哈哈,它只是摆脱了列表视图的整个循环思想。。。这就是制作糟糕应用程序的原因。@SarojRaut这是一个糟糕的解决方案。。。这与您根本不使用ViewHolder和在每次getView调用中膨胀视图相同当我不使用ViewHolder时,我的列表视图在滚动过程中会滞后。这个方法对我来说很有效,可以得到正确的位置:)