【问题标题】: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()

标签: android android-activity android-fragments


【解决方案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() 响应。然后从活动中你可以得到那个上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多