代码之家  ›  专栏  ›  技术社区  ›  Josef

从AltertDialog listview中的选定项获取值

  •  0
  • Josef  · 技术社区  · 7 年前

    我有一个alter对话框,其中包含listview和由一些项目填充的自定义适配器。每个项目都有一个名称和id。

    这是物品持有人:

    public class TOperaterHolder {
    
    private String NazivOperatera;
    private String IDOperater;
    
    public TOperaterHolder(String nazivOperater, String idOperater) {
        this.NazivOperatera = nazivOperater;
        this.IDOperater = idOperater;
    }
    
    public String getNazivOperatera() {
        return NazivOperatera;
    }
    
    public void setNazivOperatera(String nazivOperatera) {
        NazivOperatera = nazivOperatera;
    }
    
    public String getIDOperater() {
        return IDOperater;
    }
    
    public void setIDOperater(String IDOperater) {
        this.IDOperater = IDOperater;
    }
    
    }
    

    这是自定义适配器:

    public class CustomAdapterTOperateri extends BaseAdapter {
    
    ArrayList<TOperaterHolder> mData;
    Context mContext;
    LayoutInflater inflater;
    
    
    public CustomAdapterTOperateri(ArrayList<TOperaterHolder> data, Context context) {
        mData = data;
        mContext = context;
        inflater = LayoutInflater.from(mContext);
    
    }
    
    public class ViewHolder {
        TextView txtNazivTOperater;
    }
    
    @Override
    public int getCount() {
        return mData.size();
    }
    
    @Override
    public TOperaterHolder getItem(int position) {
        return null;
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    @Override
    public View getView(int position, View view, ViewGroup parent) {
    
        if (view == null) {
                 LayoutInflater mInflater = (LayoutInflater) mContext
                    .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
    
            view = mInflater.inflate(R.layout.inflate_red, null);
        }
    
        TextView tvTitle = (TextView) view.findViewById(R.id.txtNazivTOperater);
        View v = (View) view.findViewById(R.id.listViewTOperater);
        tvTitle.setText(mData.get(position).getNazivOperatera());
    
        return view;
    
    }
    
    }
    

    此部分放置在“活动”中,我有方法使用listview显示alter对话框:

     private void AlertListItems()
    {
        AlertDialog.Builder dialog = new AlertDialog.Builder(IzborRazduzivanje.this);
        dialog.setTitle("List Title");
        View customView = LayoutInflater.from(IzborRazduzivanje.this).inflate(
                R.layout.inflate, null, false);
        ListView listView = (ListView) customView.findViewById(R.id.listViewTOperater);
    
        ArrayList<TOperaterHolder> itemList = new ArrayList<TOperaterHolder>();
        itemList.add(new TOperaterHolder("J", "1"));
        itemList.add(new TOperaterHolder("B", "2"));
        itemList.add(new TOperaterHolder("C", "3"));
    
    
        CustomAdapterTOperateri mAdapter = new CustomAdapterTOperateri(itemList, IzborRazduzivanje.this);
        listView.setAdapter(mAdapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        dialog.setView(customView);
        dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
    
            }
        });
        dialog.show();
    
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                TOperaterHolder item = (TOperaterHolder)adapterView.getItemAtPosition(i);
                System.out.println("Selected item: " + item.getIDOperater());
            }
        });
    
        }
    

    当警报对话框打开时,我会看到所有三个项目,但当我单击其中任何一个项目时,会出现如下错误

    Java语言lang.NullPointerException:TOperaterHolder。空对象引用上的GetIdoOperater()'

    这里可能有什么问题?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Santanu Sur    7 年前

    使用

      TOperaterHolder item = itemList.get(i);
    

    而不是

      TOperaterHolder item = (TOperaterHolder)adapterView.getItemAtPosition(i);
    

    onItemClickListener