【问题标题】:getView not getting called in custom adaptergetView 没有在自定义适配器中被调用
【发布时间】:2014-02-17 13:42:58
【问题描述】:

我正在尝试在对话框中创建一个列表视图。但是我的适配器中的 getView 函数永远不会被调用。有什么想法吗?

适配器:

public class DialogAdapter extends BaseAdapter{

HashMap<String, String> extraInfo;
private String[] mKeys;

Context mContext;
int res;
LayoutInflater vi;
public DialogAdapter(){

}

public DialogAdapter(Context context,HashMap<String, String> extraInfo) {
    this.extraInfo = extraInfo;
    mKeys = this.extraInfo.keySet().toArray(new String[this.extraInfo.size()]);
    mContext = context;
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return extraInfo.size();
}


@Override
public Object getItem(int position) {
    return extraInfo.get(mKeys[position]);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Textholder textholder = null;
    System.out.println("Test");
    if(convertView ==null){
        convertView = vi.inflate(R.layout.cust_dialog_item, parent, false);
        textholder = new Textholder();
        textholder.info = (TextView)convertView.findViewById(R.id.textProfile);
        textholder.value = (TextView)convertView.findViewById(R.id.valueProfile);

        convertView.setTag(textholder);
    }
    else{
        textholder = (Textholder)convertView.getTag();
    }
    textholder.info.setText(mKeys[position]);
    textholder.value.setText(getItem(position).toString());




    return convertView;
}

private static class Textholder {
    TextView info;
    TextView value;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

}

设置适配器并制作对话框:

        DialogAdapter dAdapter = new DialogAdapter(x,extraInfo);
        AlertDialog dialog = new AlertDialog.Builder(getActivity())
        .setView(getActivity().getLayoutInflater().inflate(R.layout.custdialog, null))
        .create();
        View x = inflater.inflate(R.layout.custdialog, container, false);
        ListView custListDialog = (ListView)x.findViewById(android.R.id.list);

        dialog.show();
        custListDialog.setAdapter(dAdapter);

【问题讨论】:

    标签: java android android-listview adapter


    【解决方案1】:

    您将布局膨胀了两次。对话框中的列表视图与您将适配器设置为的不同。

    修复它,例如改变

    AlertDialog dialog = new AlertDialog.Builder(getActivity())
    .setView(getActivity().getLayoutInflater().inflate(R.layout.custdialog, null))
    .create();
    View x = inflater.inflate(R.layout.custdialog, container, false);
    

    View x = inflater.inflate(R.layout.custdialog, container, false);
    AlertDialog dialog = new AlertDialog.Builder(getActivity())
    .setView(x)
    .create();
    

    【讨论】:

    • 感谢您的帮助。它现在正在工作。我稍后会接受你的回答。
    【解决方案2】:

    试试这个

       custListDialog.setAdapter(dAdapter);
     dialog.show();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2013-04-26
      相关资源
      最近更新 更多