Android将数据从ListView传递到弹出窗口

时间:2013-04-02 08:56:31

标签: android listview popup

我正在为我的问题寻找解决方案,但仍然无法弄明白。我想要实现什么目标?

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

    data = getIntent()。getParcelableArrayListExtra(“data”);

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

    list.setAdapter(DataAdapter的);

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

    Button... android:onClick="showPopup"
    
  5. 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对象的一些文本,并将其显示在我的弹出窗口中。

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

2 个答案:

答案 0 :(得分:2)

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

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();
}
});
}
});

我希望这会对你有所帮助。

谢谢。

答案 1 :(得分: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