我想创建一个功能类似于Gmail android应用程序的 ListView 。我的意思是,您可以通过单击左侧的图像来选择行,也可以通过单击该行的其他任何位置来查看电子邮件。我可以接近,但还不算很近。
我的自定义行由左侧的ImageView和右侧的一些TextView组成。这是我的适配器上的getView的要点。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getListView().setItemChecked(position, !getListView().isItemChecked(position));
}
});
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
}
});
}
这非常接近!缺少的是在行单击监听器上突出显示该行。
最佳答案
选项1 :使用listView的内置choiceMode
功能。不幸的是,我从未实现过。因此,无法给您详细的答案。但是您可以从here和其他答案中获得提示。
选项2 :自己实现。定义一个array
/list
或任何替代方法,以保留列表中所选元素的索引。然后使用它来过滤getView()中的背景。这是一个工作示例:
public class TestAdapter extends BaseAdapter {
List<String> data;
boolean is_element_selected[];
public TestAdapter(List<String> data) {
this.data = data;
is_element_selected = new boolean[data.size()];
}
public void toggleSelection(int index) {
is_element_selected[index] = !is_element_selected[index];
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Initialize your view and stuff
if (is_element_selected[position])
convertView.setBackgroundColor(context.getResources().getColor(R.color.blue_item_selector));
else
convertView.setBackgroundColor(Color.TRANSPARENT);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleSelection(position);
}
});
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//get to detailed view page
}
});
return convertView;
}
祝你好运!