Android 如何在列表中实现圆角效果

Android 如何在列表中实现圆角效果,android,android-listview,android-custom-view,Android,Android Listview,Android Custom View,我已经成功地在CustomAdapter类中实现了圆角ListView,如下所示: @Override public View getView(final int position, View convertView, ViewGroup parent) { // convert view = design View v = convertView; if (v == null) { viewHolder = new ViewHolder();

我已经成功地在CustomAdapter类中实现了圆角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();
    }
但我不知道如何在下面的类中实现相同的功能,我知道我必须使用
countryList
来代替
arrayList
,但是
视图和
位置如何

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;
                        .....
                }
            }
        });
    }
}
公共类CountryFragment扩展了片段{
视图;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u,container,false);
displayListView();
返回视图;
}
私有void displayListView(){
//国家列表
List countryList=new ArrayList();
国家列表。添加(“国家1”);
国家列表。添加(“国家2”);
国家列表。添加(“国家3”);
国家列表。添加(“国家4”);
国家列表。添加(“国家5”);
//从字符串数组创建ArrayAdapter
ArrayAdapter dataAdapter=新的ArrayAdapter(getActivity(),
R.layout.u社会,国家列表);
ListView=(ListView)view.findViewById(R.id.listCountry);
//将适配器分配给ListView
setAdapter(dataAdapter);
//启用对给定ListView内容的筛选
setTextFilterEnabled(true);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
开关(位置)
{
案例0:
Toast.makeText(getActivity(),“Country 1”,Toast.LENGTH_SHORT.show();
打破
.....
}
}
});
}
}

在1代码示例中,用户创建了一个自定义适配器来显示项目列表,如

MyCustomeAdapter extends BaseAdapter
其中,正如在代码中一样,您只是简单地显示了内置适配器,该适配器不支持进行所有这些更改的
重写
getView()
方法

因此,为了完成示例所做的工作,创建一个类

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);
        }
    }
静态类MyListAdapter扩展BaseAdapter{
私有列表视图=新的ArrayList();
公共无效添加视图(视图){
视图。添加(视图);
}
public int getCount(){
返回视图。size();
}
公共对象getItem(int位置){
返回视图.get(position.getTag();
}
公共长getItemId(int位置){
返回视图.get(position.getId();
}
公共视图getView(int位置、视图转换视图、视图组父视图){
返回视图。获取(位置);
}
}
而不是做

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.adapter_social, countryList);
ArrayAdapter dataAdapter=新的ArrayAdapter(getActivity(),
R.layout.u社会,国家列表);

MyListAdapter listAdapter=新的MyListAdapter()

LayoutInflater充气机=getLayoutInflater();
int item_布局=0;
for(int i=0;i
如果您使用的是阵列适配器,则必须使用自定义适配器类,否则无法实现此目的。@umeshchabra谢谢我使用自定义适配器实现了它
 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);