Android自定义BaseAdapter

Android自定义BaseAdapter,android,listview,adapter,Android,Listview,Adapter,我有一个BaseAdapter来显示带有节的ListView。 对于每一行我都有一个TextView,现在我想为每一行添加另一个TextView。 在Item类和getView()方法中,我添加了一个新字符串text\u id,但是现在当我调用适配器时,我出现了一个错误:Item中的Item(string,string)无法应用 public class AlphabetListAdapter extends BaseAdapter { public static abstract class

我有一个BaseAdapter来显示带有节的ListView。 对于每一行我都有一个TextView,现在我想为每一行添加另一个TextView。 在
Item
类和
getView()
方法中,我添加了一个新字符串
text\u id
,但是现在当我调用适配器时,我出现了一个错误:
Item中的Item(string,string)无法应用

public class AlphabetListAdapter extends BaseAdapter {

public static abstract class Row {}

public static final class Section extends Row {
    public final String text;
    public Section(String text) {
        this.text = text;
    }
}

public static final class Item extends Row {
    public final String text;
    public final String text_id;
    public Item(String text, String text_id ) {
        this.text = text;
        this.text_id = text_id;
    }
}
private List<Row> rows;

public void setRows(List<Row> rows) {
    this.rows = rows;
}

@Override
public int getCount() {
    return rows.size();
}

@Override
public Row getItem(int position) {
    return rows.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    if (getItem(position) instanceof Section) {
        return 1;
    } else {
        return 0;
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;

    if (getItemViewType(position) == 0) { // Item
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = (LinearLayout) inflater.inflate(R.layout.row_item, parent, false);
        }

        Item item = (Item) getItem(position);

        TextView textView = (TextView) view.findViewById(R.id.textView1);
        TextView textView_id = (TextView) view.findViewById(R.id.id_cl);
        textView.setText(item.text);
        textView_id.setText(item.text_id);

    } else { // Section
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = (LinearLayout) inflater.inflate(R.layout.row_section, parent, false);
        }

        Section section = (Section) getItem(position);
        TextView textView = (TextView) view.findViewById(R.id.textView1);
        textView.setText(section.text);
    }

    return view;
}
}
公共类AlphabetListAdapter扩展了BaseAdapter{
公共静态抽象类行{}
公共静态最终类节扩展了行{
公共最终字符串文本;
公共部分(字符串文本){
this.text=文本;
}
}
公共静态最终类项扩展行{
公共最终字符串文本;
公共最终字符串文本\u id;
公共项(字符串文本、字符串文本\u id){
this.text=文本;
this.text\u id=text\u id;
}
}
私有列表行;
公共无效集合行(列表行){
this.rows=行;
}
@凌驾
public int getCount(){
返回rows.size();
}
@凌驾
公共行getItem(int位置){
返回行。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
public int getViewTypeCount(){
返回2;
}
@凌驾
public int getItemViewType(int位置){
if(节的getItem(position)实例){
返回1;
}否则{
返回0;
}
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(getItemViewType(position)==0){//Item
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)parent.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
视图=(线性布局)充气器。充气(R.layout.row_项,父项,false);
}
Item Item=(Item)getItem(position);
TextView TextView=(TextView)view.findViewById(R.id.textView1);
TextView TextView_id=(TextView)view.findViewById(R.id.id_cl);
textView.setText(item.text);
textView_id.setText(item.text_id);
}else{//节
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)parent.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
视图=(线性布局)充气器。充气(R.layout.row_部分,父项,false);
}
Section Section=(Section)getItem(位置);
TextView TextView=(TextView)view.findViewById(R.id.textView1);
textView.setText(section.text);
}
返回视图;
}
}
在OnCreateView()中

List clienti=populateclienti();
Collections.sort(clienti);
列表行=新建ArrayList();
int start=0;
int end=0;
字符串previousLetter=null;
对象[]tmpIndexItem=null;
用于(字符串国家/地区:clienti){
String firstLetter=country.substring(0,1);
//如果我们已更改为新字母,请将上一个字母添加到字母滚动条中
if(previousLetter!=null&!firstLetter.equals(previousLetter)){
end=行。size()-1;
tmpIndexItem=新对象[3];
tmpIndexItem[0]=上一个字母.toUpperCase(Locale.意大利语);
tmpIndexItem[1]=开始;
tmpIndexItem[2]=结束;
字母表。添加(tmpIndexItem);
开始=结束+1;
}
//检查是否需要添加标题行
如果(!firstLetter.equals(previousLetter)){
添加(新的AlphabetListAdapter.Section(第一个字母));
部分。放置(第一个字母,开头);
}
//将国家/地区添加到列表中
添加(新的AlphabetListAdapter.Item(country));
前一个字母=第一个字母;
}
if(上一个字母!=null){
//保存最后一封信
tmpIndexItem=新对象[3];
tmpIndexItem[0]=上一个字母.toUpperCase(Locale.意大利语);
tmpIndexItem[1]=开始;
tmpIndexItem[2]=行.size()-1;
字母表。添加(tmpIndexItem);
}
adapter.setRows(行);
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
TextView temp=(TextView)view.findViewById(R.id.textView1);
字符串str=temp.getText().toString();
Toast.makeText(getActivity(),str+)被按下“+位置,Toast.LENGTH_SHORT.show();
}
});
updateList();
返回rootView;
}
row_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:textColor="#000000"
    android:textSize="20sp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Small Text"
    android:id="@+id/id_cl" />


最简单的方法是在XML布局文件
R.layout.row_部分中添加另一个
TextView
,错误在哪里?错误行:
rows.add(新的AlphabetListAdapter.Item(country))为什么会让你感到惊讶?项的构造函数接受两个参数
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:textColor="#000000"
    android:textSize="20sp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Small Text"
    android:id="@+id/id_cl" />