传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义

Posted

技术标签:

【中文标题】传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义【英文标题】:pass context of activity in AdapterView.OnItemClickListener() nested in fragment - The method is undefined传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义 【发布时间】:2014-09-21 11:43:49 【问题描述】:

我在此方法中传递活动上下文时遇到问题

        private void registerClicksOnParents(ListView listView, final Dialog d, final   
        ImageButton btn, final ChildAndActivityDataClass currentChild) 
        listView.setOnItemClickListener(new OnItemClickListener() 

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) 

                d.dismiss();
                btn.setImageResource(R.drawable.odebrany);
                btn.setEnabled(false);          
                currentChild.setOdbiorDzieckaIdOfState(App_class.odebrane);
                SingleInfoToServer singleInfoToServer = SingleInfoToServer(currentChild.getIdOfChild(), 
                                                                           currentChild.getOdbiorDzieckaIdOfActivity(), 
                                                                           currentChild.getOdbiorDzieckaIdOfState(),
                                                                           context);
                           
        );


       

当我在onItemClick 中调用此方法时,我无法使用getActivity,我尝试使用MainScreen.this,但没有任何效果。我尝试以这种方式在 Fragment onCreate 方法中获取上下文:

public class Aktywnosci_Fragment extends Fragment 

Context context ;

@Override
public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    context = getActivity();


但它仍然显示相同的The method SingleInfoToServer(int, int, int, Context) is undefined for the type new AdapterView.OnItemClickListener()

这个方法构造函数是这样的

public SingleInfoToServer( int idOfChild,  int idOfActivity, int idOfState, Context context) 

    this.context = context;     
    this.idOfChild = idOfChild;
    this.idOfActivity = idOfActivity;
    this.idOfState = idOfState;

所以一切都应该正常

按照你在 cmets 中所说的进行编辑,我尝试了这个

private void registerClicksOnParents(ListView listView, final Dialog d, final ImageButton btn, final ChildAndActivityDataClass currentChild, final Activity activity) listView.setOnItemClickListener(new OnItemClickListener()

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) 

                d.dismiss();
                btn.setImageResource(R.drawable.odebrany);
                btn.setEnabled(false);          
                currentChild.setOdbiorDzieckaIdOfState(App_class.odebrane);
                SingleInfoToServer singleInfoToServer = SingleInfoToServer(currentChild.getIdOfChild(), 
                                                                           currentChild.getOdbiorDzieckaIdOfActivity(), 
                                                                           currentChild.getOdbiorDzieckaIdOfState(),
                                                                           view.getContext());

                   

           );  
           

没有任何变化

【问题讨论】:

使用view.getContext() 【参考方案1】:

当我在 onItemClick 中调用此方法时,我无法使用 getActivity,我 尝试使用 MainScreen.this 但没有任何效果

您可以使用view.getContext() in onItemClick 获取它,而不是存储上下文引用。

要创建SingleInfoToServer 对象,还可以使用new 关键字:

SingleInfoToServer singleInfoToServer = new SingleInfoToServer(
                                                 currentChild.getIdOfChild(),
                                  currentChild.getOdbiorDzieckaIdOfActivity(), 
                  currentChild.getOdbiorDzieckaIdOfState(), view.getContext());

【讨论】:

这对我来说没有任何改变:SingleInfoToServer singleInfoToServer = SingleInfoToServer(currentChild.getIdOfChild(), currentChild.getOdbiorDzieckaIdOfActivity(), currentChild.getOdbiorDzieckaIdOfState(), view.getContext());而同样的错误仍然 @MyWay : 像SingleInfoToServer singleInfoToServer = new SingleInfoToServer(currentChild.getIdOfChild(), currentChild.getOdbiorDzieckaIdOfActivity(), currentChild.getOdbiorDzieckaIdOfState(), view.getContext());一样做 OO omg 我只是个白痴,声明中缺少新的东西,当你生病时编程:D,谢谢帮助【参考方案2】:

您必须使用 Activity 对象来捕获 getActivity() 响应。然后从活动中你可以得到那个上下文。

【讨论】:

以上是关于传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义的主要内容,如果未能解决你的问题,请参考以下文章

数据从父片段传递到选项卡片段(子) - Android

如何在不复制片段的情况下传递道具

活动结果片段索引超出范围:0x20001

共享元素转换:活动到嵌套在另一个活动中的片段

Recyclerview 滚动在嵌套滚动视图中的片段中不起作用

当返回到“导航架构组件”中的同一选项卡时,嵌套片段的状态会丢失