【问题标题】:Cannot Resolve Method getActivity(), setArguments(), getArguments(), and newInstance()无法解决方法 getActivity()、setArguments()、getArguments() 和 newInstance()
【发布时间】:2016-01-04 06:49:27
【问题描述】:

你能帮我解决这个错误吗,我不明白它是什么意思。 我正在关注从 - sitepoint 制作标签布局的教程。这是我的代码,我分离了我的文件 一分为二,Main Activity(eco_detailed_information.java)并为其创建了Adapter (eco_detailed_information_adapter)

主要活动(eco_detailed_information.java) - 无法解析方法 setArguments(android.os.Bundle) - 无法解析方法 getActivity() - 无法解析方法 getArguments()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_eco_detailed_information);

    //SET UP TOOLBAR
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);

    //Initializing NavigationView
        mNavigationView = (NavigationView) findViewById(R.id.navigation_view);

    //NEW INSTANCE
        eco_detailed_information_adapter adapter = new eco_detailed_information_adapter(getSupportFragmentManager());

    //SET UP PAGER - TAB LAYOUT with ADAPTER
        ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);
        TabLayout tabLayout = (TabLayout)findViewById(R.id.tablayout);
        tabLayout.setupWithViewPager(viewPager);
}

//DEFAULT CONSTRUCTOR
    public eco_detailed_information() {}

//
    public static eco_detailed_information newInstance(int tabPosition) {
        eco_detailed_information fragment = new eco_detailed_information();
        Bundle args = new Bundle();
        args.putInt(TAB_POSITION, tabPosition);
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Bundle args = getArguments();
        int tabPosition = args.getInt(TAB_POSITION);
        TextView tv = new TextView(getActivity());
        tv.setGravity(Gravity.CENTER);
        tv.setText("Text in Tab #" + tabPosition);
        return tv;
    }

}

适配器 (eco_detailed_information_adapter) - 无法解析 newInstance()

public class eco_detailed_information_adapter extends FragmentStatePagerAdapter {

    public eco_detailed_information_adapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return eco_detailed_information_adapter.newInstance(position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Tab " + position;
    }
}

}

【问题讨论】:

  • 你弄错了,再次检查你的教程!你应该在你的片段中使用 getInstance() 你有任何片段类吗?
  • @Amir - 好的,我会仔细检查。不,我没有任何片段类。我导入了 v4.Fragment 和其余部分。但还是不行。
  • 请发布您的日志。
  • @RoCk 正如我在您的代码中看到的那样,您将所有代码都放在了活动白色中,这是不正确的。 getArgument() , getInstance() , getActivity() 用于 Fragment 类而不是活动类。
  • @FrankN.Stein - 我没有运行/编译。相反,我会暂时评论它们。

标签: android-fragments android-activity android-adapter


【解决方案1】:

示例运行良好,但您提供的代码有一些错误,例如:在您的适配器中,您返回 eco_detailed_information_adapternewInstance() 这是错误的!你应该返回你的 Fragment 的 newInstance。

您应该创建一个类,如示例 (DesignDemoFragment) 将其放入活动或单独的类中(如果您想将其放入单独的类中,您应该进行一些更改),然后将 newInstance() 放入其中。

【讨论】:

  • 那么,您能否仅在(将 newInstance() 放入其中)中提供它的段代码 - 我几乎看不出这个想法。因为我要分离Adapter。我希望我的程序有条理,这就是原因。我把它们放在一个名为“适配器”的文件夹中
  • 将适配器放在期望的包/文件夹中,但以正确的方式进行。这是关于片段的好教程:vogella.com/tutorials/AndroidFragments/article.html
  • 非常感谢您的帮助。我是这个 Android 东西的新手。 :D 哈哈哈.. 感谢您的链接。
猜你喜欢
  • 2017-09-30
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多