【问题标题】:Passing Data from ListViews Adapter to Fragment [duplicate]将数据从 ListViews 适配器传递到片段 [重复]
【发布时间】:2014-08-06 13:52:20
【问题描述】:

我有一个 ListView 适配器,其中包含每个产品(Listview 行)的名称、价格和 ImageButtons(取消),Listview 有自己的 Onclick 事件,用于编辑单击的产品/行。我的问题是我应该如何将这个 ListView 中的 ImageButtons 的数量(位置)传递回 Fragment,以便我可以删除该行。它困扰了我很长一段时间。这是代码

适配器类receiptListAdapter中的代码(如果需要,我可以粘贴整个代码)

...

ImageButton test = (ImageButton)view.findViewById(R.id.imgBtnDelete);       

        test.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


             test.setTag(position); // this is working and i get the position from the ImageButtons inside dynamic Clickable ListView

            }

          });      

...

来自 Fragment ReceiptItemsFragment 的代码(我想在哪里得到那个号码)

...  
 public void deleteProduct(int number){ 

   //note: this is working if am calling it from the fragment, but i need it to call from adapter

     receiptItemArrayList.remove(number);
      TextView txtTotalAmmount = (TextView) getView().findViewById(
                R.id.txtReceiptTotalAmmount);
        double totalAmmount = getTotalAmmount(receiptItemArrayList);

        txtTotalAmmount.setText("Sum: " + String.valueOf(totalAmmount));
    receiptListAdapter.notifyDataSetChanged();

    }
...

我试过了

喜欢这个((ReceiptItemsFragment)context).deleteProduct(position);

但我得到Cannot cast from Context to ReceiptItemsFragment

我尝试了它是静态的,但后来我无法从 Fragment 运行代码。我是否应该尝试使用接口来传递数据以及如何传递数据(我只知道如何在片段和活动之间做到这一点)?有什么建议吗?

【问题讨论】:

  • 它是一个将其转换为上下文的片段。这是错误的。如果您需要片段中的上下文,请使用getActivity()
  • Adapter是在拥有Fragment的Activity里面,还是在一个单独的类中?
  • @tknell 它在单独的类中
  • 我找到了答案,我这样做了 stackoverflow.com/a/15444411/1393695</a> 并且成功了

标签: android android-fragments android-listview


【解决方案1】:

我建议您让您的 Activity 实现 AdapterView.OnItemClickListener 并将其作为侦听器添加到您的 ListView。活动内部:

listView.setOnItemClickListener(this);

并且从 Activty 中,您可以简单地调用片段上的方法:

@Override
onItemClick(AdapterView<?> parent, View view, int position, long id){
    //something like this, to get the product id
    deleteProduct(listView.getAdapter().getItem(position).getId());
}

【讨论】:

  • 我觉得我写的有点不清楚,我会解释我想做什么。我有一个具有适配器的 Listview,在该适配器中,每行都有产品名称、产品价格、产品数量和 ImageButtons,它们是动态创建的。我想要做的是在 ImageButton 单击上获取一行的位置编号,然后将该编号传递给 Fragment,以便我可以使用 deleteProduct (int number) 删除该行。我确实得到了那个号码,但我不知道如何将该号码传递回 Fragment
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多