使用自定义列表视图适配器和不同布局的结果不正确

时间:2014-08-29 20:51:46

标签: android listview adapter

Hello Stack Overflow Android Users,

请帮助解决以下问题: 我正在尝试创建一个列表视图,在某些情况下,某些行的背景颜色会因不同的行而发生变化。 这是一些代码。 这是MainActivity.class

public class MainActivity extends Activity {
    ListView list;
    ArrayList<Map<String, String>> values;  
    String[] names = {"Astor", "Brian", "Cody", "Dexter", "Emma", "Finch", "Glenn"};
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.list);

        values = new ArrayList<Map<String, String>>();
        for(int i = 0; i<6; i++){
            Map<String, String> map = new HashMap<String, String>();
            map.put("id", ""+i);
            map.put("title", names[i]);
            values.add(map);            
        }       
        final mAdapter adapter = new mAdapter(this, R.layout.list1, values);        
        list.setAdapter(adapter);
        list.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), "itemClick: position = " + position + ", id = " + id, Toast.LENGTH_LONG).show();
            }
          });   
    }

这是我的自定义适配器类mAdapter.class:

public class mAdapter extends ArrayAdapter{
    private ArrayList<Map<String, String>> values;
    public mAdapter(Context context, int textViewResourceId, ArrayList<Map<String, String>> values){
        super(context, textViewResourceId, values);
        this.values = values;
    }
    public View getView(int pos, View v, ViewGroup p){
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(v == null){              
            v = inflater.inflate(R.layout.list1, null);             
        }
        TextView t = (TextView) v.findViewById(R.id.title);
        t.setText("Position: " + pos);              
        if(pos == 2){               
            v.setBackgroundColor(0x30ff0000);
            t.setText("!!!Position: " + pos);
        }

        return v;
    }
}

当我运行此应用程序时,我得到了这样的结果: 默认背景颜色为灰色。正如你所看到的那样,颜色不仅仅被更改为&#34; pos&#34; 2,但也适用于&#34; pos&#34;但是另一方面,文本仅针对右边的行改变了&#34; pos&#34;等于2。 任何人都可以解释为什么会发生这种情况以及解决这个问题的方法是什么?

谢谢

P.S。好像,我没有足够的分数来发布图片。这是结果的截图 http://i.stack.imgur.com/4bHeC.png

1 个答案:

答案 0 :(得分:0)

你也应该在else的情况下将默认颜色设置为灰色

像这样的东西

if(pos == 2){               
        v.setBackgroundColor(0x30ff0000);
        t.setText("!!!Position: " + pos);
    }
else {
    v.setBackgroundColor(color code for grey);
}

这种情况正在发生,因为您正在重复使用转换视图