列表视图 select 多行
listview select multiple row
我正在使用 ArrayAdapter
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
android.R.layout.simple_list_item_1, items);
listView1.setAdapter(adapter);
问题是当我 select 来自 listview
的第一项时,它自动 select 另一项。
我没有 select 项目 12
所有代码
final ListView listView1 = (ListView) findViewById(R.id.listView);
Product[] items = {
new Product(1, "Milk", 21.50),
new Product(2, "Butter", 15.99),
new Product(3, "Yogurt", 14.90),
new Product(4, "Toothpaste", 7.99),
new Product(5, "Ice Cream", 10.00),
new Product(6, "Milk", 21.50),
new Product(7, "Butter", 15.99),
new Product(8, "Yogurt", 14.90),
new Product(9, "Toothpaste", 7.99),
new Product(10, "Ice Cream", 10.00),
new Product(11, "Milk", 21.50),
new Product(12, "Butter", 15.99),
new Product(13, "Yogurt", 14.90),
new Product(14, "Toothpaste", 7.99),
new Product(15, "Ice Cream", 10.00),
new Product(16, "Milk", 21.50),
new Product(17, "Butter", 15.99),
new Product(18, "Yogurt", 14.90),
new Product(19, "Toothpaste", 7.99),
new Product(20, "Ice Cream", 10.00),
};
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
android.R.layout.simple_list_item_1, items);
listView1.setAdapter(adapter);
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = ((TextView) view).getText().toString();
view.setSelected(true);
listView1.setItemChecked(position, true);
view.setBackgroundColor(Color.GREEN);
}
});
这是因为您的适配器重用了膨胀的视图。
一个解决方案是覆盖您的 ArrayAdapter's
getView()
方法以正确呈现您的视图并(甚至更好)实施 ViewHolder
以便您不会失去任何性能通过一次又一次地充气!
尝试进行此更改
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String item = listView1.getItemAtPosition(position);
Log.d("position", position+", item");
}
});
在下面的评论中更新您在 logcat 中获得的值,以便我可以建议更好的代码。
在 CustomArrayAdapter
共享于 link http://paste.ubuntu.com/14848762/ 中,您正在 Click Listener
上更改 relativeLayout
的颜色,当您滚动或视图被回收时,您应重置此布局并应为您单击的项目启用颜色。例如,您可以使用这种方法。
relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int color;
if (tt8.getText().toString().equals("1")){
color = Color.RED;
relativeLayout.setBackgroundColor(color);
}else {
color = Color.GREEN;
relativeLayout.setBackgroundColor(color);
}
p.setColor(color);
}
});
relativeLayout.setBackgroundColor(p.getColor());
希望对您有所帮助。
我正在使用 ArrayAdapter
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
android.R.layout.simple_list_item_1, items);
listView1.setAdapter(adapter);
问题是当我 select 来自 listview
的第一项时,它自动 select 另一项。
我没有 select 项目 12
所有代码
final ListView listView1 = (ListView) findViewById(R.id.listView);
Product[] items = {
new Product(1, "Milk", 21.50),
new Product(2, "Butter", 15.99),
new Product(3, "Yogurt", 14.90),
new Product(4, "Toothpaste", 7.99),
new Product(5, "Ice Cream", 10.00),
new Product(6, "Milk", 21.50),
new Product(7, "Butter", 15.99),
new Product(8, "Yogurt", 14.90),
new Product(9, "Toothpaste", 7.99),
new Product(10, "Ice Cream", 10.00),
new Product(11, "Milk", 21.50),
new Product(12, "Butter", 15.99),
new Product(13, "Yogurt", 14.90),
new Product(14, "Toothpaste", 7.99),
new Product(15, "Ice Cream", 10.00),
new Product(16, "Milk", 21.50),
new Product(17, "Butter", 15.99),
new Product(18, "Yogurt", 14.90),
new Product(19, "Toothpaste", 7.99),
new Product(20, "Ice Cream", 10.00),
};
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
android.R.layout.simple_list_item_1, items);
listView1.setAdapter(adapter);
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = ((TextView) view).getText().toString();
view.setSelected(true);
listView1.setItemChecked(position, true);
view.setBackgroundColor(Color.GREEN);
}
});
这是因为您的适配器重用了膨胀的视图。
一个解决方案是覆盖您的 ArrayAdapter's
getView()
方法以正确呈现您的视图并(甚至更好)实施 ViewHolder
以便您不会失去任何性能通过一次又一次地充气!
尝试进行此更改
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String item = listView1.getItemAtPosition(position);
Log.d("position", position+", item");
}
});
在下面的评论中更新您在 logcat 中获得的值,以便我可以建议更好的代码。
在 CustomArrayAdapter
共享于 link http://paste.ubuntu.com/14848762/ 中,您正在 Click Listener
上更改 relativeLayout
的颜色,当您滚动或视图被回收时,您应重置此布局并应为您单击的项目启用颜色。例如,您可以使用这种方法。
relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int color;
if (tt8.getText().toString().equals("1")){
color = Color.RED;
relativeLayout.setBackgroundColor(color);
}else {
color = Color.GREEN;
relativeLayout.setBackgroundColor(color);
}
p.setColor(color);
}
});
relativeLayout.setBackgroundColor(p.getColor());
希望对您有所帮助。