1

我一直在为我的问题寻找解决方案,但仍然无法弄清楚。我想达到什么目的?

  1. 我有一个Data对象,它代表我正在使用的数据。只是一个带有几个String变量的简单类,它还实现了Parcelable.
  2. 我使用外部 Web 服务填充Data对象并获得了List<Data> dataList = new ArrayList<Data>();结果。我将此列表发送给另一个Activity.
  3. 我得到了一个可以查看结果的DataAdapter扩展程序,一切正常,我只是设置了我的适配器并在.ArrayAdapter<Data>ListView

    数据 = getIntent().getParcelableArrayListExtra("data");

    dataAdapter = new DataAdapter(this, R.layout.activity_results_list,data);

    list.setAdapter(dataAdapter);

  4. 现在事情开始变得棘手。在每个列表元素上,我添加了一个按钮

    Button... android:onClick="showPopup"
    

showPopup方法创建一个PopupWindow,然后我用我的布局对其进行膨胀。

LinearLayout viewGroup = (LinearLayout) findViewById(R.id.table_phones);

LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View layout = layoutInflater.inflate(R.layout.popup_phones, viewGroup);

我的问题和问题是:如何将我的数据传递给该弹出窗口?例如,我只想从Data与给定项目关联的对象中传递一些文本ListView并将其显示在我的弹出窗口中。

如果您需要,我可以粘贴更多代码。

4

2 回答 2

2

首先,您将选定的列表项转换为集合对象。然后您可以将其转换为数组列表。然后您可以从该数组列表访问并将数据填充到您的弹出窗口。示例代码:

lv1.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
        Collection<Object> str = mylist.get(arg2).values();
        ArrayList<Object> al1 = new ArrayList<Object>(str);

        LayoutInflater layout = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        View popupView = layout.inflate(R.layout.your_popup, null);

        popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);

        TextView tv1 = (TextView) popupView.findViewById(R.id.textView3);
        TextView tv2 = (TextView) popupView.findViewById(R.id.textView4);
        TextView tv3 = (TextView) popupView.findViewById(R.id.textView5);
        TextView tv4 = (TextView) popupView.findViewById(R.id.textView6);
        TextView tv5 = (TextView) popupView.findViewById(R.id.textView7);

        tv1.setText(al1.get(1));
        tv2.setText(al1.get(2));
        tv3.setText(al1.get(3));
        tv4.setText(al1.get(4));
        tv5.setText(al1.get(5));

        Button close = (Button) popupView.findViewById(R.id.close);
        close.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                popupWindow.dismiss();
            }
        });
    }
});

我希望这能帮到您。

谢谢你。

于 2013-04-02T09:06:40.953 回答
0

我终于设法完成了我的任务。Gunaseelan 的回答很好,但它不适用于我列表中的 Button,仅适用于整个列表项。我在这里找到了解决方案:

http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/

我只需要创建一个自定义 onCLickListener 并将其附加到我的自定义适配器中。然后在 onClick 方法中,我只是创建我的弹出窗口,获取单击按钮的位置并填充数据。

private OnClickListener phonesListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        ListView lv = (ListView) findViewById(R.id.list_results);
        final int position = lv.getPositionForView(v);.... make whatever you need
于 2013-04-02T10:42:40.717 回答