【问题标题】:Get value from selected item in AltertDialog listview从 AltertDialog 列表视图中的选定项目获取值
【发布时间】:2018-03-01 20:00:26
【问题描述】:

我有一个包含列表视图的更改对话框,其中包含一些项目填充的自定义适配器。每个项目都有一个名称和 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;

}

}

这部分放置在活动中,我有方法使用列表视图显示更改对话框:

 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.getIDOperater()'

这里有什么问题?

【问题讨论】:

    标签: java android android-alertdialog custom-adapter listitem


    【解决方案1】:

    使用

      TOperaterHolder item = itemList.get(i);
    

    而不是

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

    onItemClickListener

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多