如何在列表中实现圆角效果
How to implement Rounded Corner Effect in a List
我已经在 CustomAdapter class 中成功实现了 Rounded Corner ListView,如下所示:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
viewHolder = new ViewHolder();
v = layoutInflater.inflate(layout, null);
viewHolder.textTitle = (TextView) v.findViewById(R.id.textTitle);
if (position == 0 && arrayList.size() == 1) {
v.setBackgroundResource(R.drawable.top_list_selector);
}
else if (position == 0) {
v.setBackgroundResource(R.drawable.top_list_selector);
}
else if (position == arrayList.size() - 1) {
v.setBackgroundResource(R.drawable.bottom_list_selector);
} else {
v.setBackgroundResource(R.drawable.mid_list_selector);
}
v.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) v.getTag();
}
但我不知道如何在下面的 class 中实现相同的功能,我明白我必须使用 countryList
代替 arrayList
但是 [= 呢? 14=] 和 position
?
public class CountryFragment extends Fragment {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_social, container, false);
displayListView();
return view;
}
private void displayListView() {
//Array list of countries
List<String> countryList = new ArrayList<String>();
countryList.add("Country 1");
countryList.add("Country 2");
countryList.add("Country 3");
countryList.add("Country 4");
countryList.add("Country 5");
//create an ArrayAdapter from the String Array
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.adapter_social, countryList);
ListView listView = (ListView) view.findViewById(R.id.listCountry);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
//enables filtering for the contents of the given ListView
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch( position )
{
case 0:
Toast.makeText(getActivity(), "Country 1", Toast.LENGTH_SHORT).show();
break;
.....
}
}
});
}
}
在第一个代码示例中,用户创建了一个自定义适配器来显示项目列表,例如
MyCustomeAdapter extends BaseAdapter
在您的代码中,您只是简单地显示了已经内置的适配器,它不支持可以进行所有这些更改的 Override
getView()
方法。
因此,为了执行示例所执行的操作,请创建一个 class
static class MyListAdapter extends BaseAdapter {
private List<View> views = new ArrayList<View>();
public void addView(View view){
views.add(view);
}
public int getCount() {
return views.size();
}
public Object getItem(int position) {
return views.get(position).getTag();
}
public long getItemId(int position) {
return views.get(position).getId();
}
public View getView(int position, View convertView, ViewGroup parent) {
return views.get(position);
}
}
而不是
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.adapter_social, countryList);
做
MyListAdapter listAdapter = new MyListAdapter();
LayoutInflater inflater = getLayoutInflater();
int item_layout = 0 ;
for(int i = 0 ; i < values.length;i++) {
//decide which layout to show depending on the item position
if(i==0) {
item_layout = R.layout.top_list_layout ;
} else if(i==values.length-1) {
item_layout = R.layout.bottom_list_layout;
} else {
item_layout = R.layout.mid_list_layout;
}
TextView button = (TextView)inflater.inflate(item_layout, null);
button.setText(values[i]);
button.setTag(new Integer(i));
listAdapter.addView(button);
}
//lv.setSelector(R.color.transparent);
lv.setAdapter(listAdapter);
我已经在 CustomAdapter class 中成功实现了 Rounded Corner ListView,如下所示:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
viewHolder = new ViewHolder();
v = layoutInflater.inflate(layout, null);
viewHolder.textTitle = (TextView) v.findViewById(R.id.textTitle);
if (position == 0 && arrayList.size() == 1) {
v.setBackgroundResource(R.drawable.top_list_selector);
}
else if (position == 0) {
v.setBackgroundResource(R.drawable.top_list_selector);
}
else if (position == arrayList.size() - 1) {
v.setBackgroundResource(R.drawable.bottom_list_selector);
} else {
v.setBackgroundResource(R.drawable.mid_list_selector);
}
v.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) v.getTag();
}
但我不知道如何在下面的 class 中实现相同的功能,我明白我必须使用 countryList
代替 arrayList
但是 [= 呢? 14=] 和 position
?
public class CountryFragment extends Fragment {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_social, container, false);
displayListView();
return view;
}
private void displayListView() {
//Array list of countries
List<String> countryList = new ArrayList<String>();
countryList.add("Country 1");
countryList.add("Country 2");
countryList.add("Country 3");
countryList.add("Country 4");
countryList.add("Country 5");
//create an ArrayAdapter from the String Array
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.adapter_social, countryList);
ListView listView = (ListView) view.findViewById(R.id.listCountry);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
//enables filtering for the contents of the given ListView
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch( position )
{
case 0:
Toast.makeText(getActivity(), "Country 1", Toast.LENGTH_SHORT).show();
break;
.....
}
}
});
}
}
在第一个代码示例中,用户创建了一个自定义适配器来显示项目列表,例如
MyCustomeAdapter extends BaseAdapter
在您的代码中,您只是简单地显示了已经内置的适配器,它不支持可以进行所有这些更改的 Override
getView()
方法。
因此,为了执行示例所执行的操作,请创建一个 class
static class MyListAdapter extends BaseAdapter {
private List<View> views = new ArrayList<View>();
public void addView(View view){
views.add(view);
}
public int getCount() {
return views.size();
}
public Object getItem(int position) {
return views.get(position).getTag();
}
public long getItemId(int position) {
return views.get(position).getId();
}
public View getView(int position, View convertView, ViewGroup parent) {
return views.get(position);
}
}
而不是
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.adapter_social, countryList);
做
MyListAdapter listAdapter = new MyListAdapter();
LayoutInflater inflater = getLayoutInflater();
int item_layout = 0 ;
for(int i = 0 ; i < values.length;i++) {
//decide which layout to show depending on the item position
if(i==0) {
item_layout = R.layout.top_list_layout ;
} else if(i==values.length-1) {
item_layout = R.layout.bottom_list_layout;
} else {
item_layout = R.layout.mid_list_layout;
}
TextView button = (TextView)inflater.inflate(item_layout, null);
button.setText(values[i]);
button.setTag(new Integer(i));
listAdapter.addView(button);
}
//lv.setSelector(R.color.transparent);
lv.setAdapter(listAdapter);