从android中的片段调用一个类

时间:2013-09-26 09:12:55

标签: android android-fragments fragment

我不能从Fragment调用局外人,不要为什么。并告诉我这些信息。

无法对MainActivity类型的非静态方法selectItem(String,String,String)进行静态引用

这是我的编码。我想从ContentFragment中调用“selectItem”类。这是我不能称之为班级的问题。

private void selectItem(String title, String gender, String getStats) {     
    Fragment fragment = new ContentFragment();
    Bundle args = new Bundle();
    args.putString(ContentFragment.JOBTITLE, title);
    args.putString(ContentFragment.JOBGENDER, gender);
    args.putString(ContentFragment.JOBSTATUS, getStats);
    fragment.setArguments(args);        

    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

}

public static class ContentFragment extends Fragment {

    public ContentFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.list_layout, container, false);
        btnPopMsg = (TextView) rootView.findViewById(R.id.btnPopMsg);
        btnPopMsg.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                >>>selectItem("", "", "ALL");<<<
            }
        });            
        return rootView;
    }
}

2 个答案:

答案 0 :(得分:1)

您必须在创建ContentFragment实例后设置对whatever-wrapper-class-is实例的引用,然后调用引用的方法。或者,如果符合您的设计,您可以从static定义中移除ContentFragment修饰符。这是因为嵌套的静态类'实例可能没有包装类的wrtapper对象,因此在嵌套类中没有对包装类的引用,它可以调用包装类'方法。

答案 1 :(得分:0)

你不能用非静态方法调用static method。如果要在onClick中调用该函数,请添加代码块:

if(getActivity() instanceof MainActivity){
      ((MainActivity)getActivity()).selectItem("", "", "ALL");
}