【问题标题】:Android Fragment Type MismatchAndroid 片段类型不匹配
【发布时间】:2014-04-11 15:15:07
【问题描述】:

我是 android 新手,正在学习 Dartmouth 的教程。 http://www.cs.dartmouth.edu/~campbell/cs65/lecture08/lecture08.html

我正在关注所有代码和 MainActivity.java,

// create the fragments
Fragment mFindFragment = new FindFragment();
Fragment mChatFragment = new ChatFragment();

// bind the fragments to the tabs - set up tabListeners for each tab 
mFindTab.setTabListener(new MyTabsListener(mFindFragment,
                           getApplicationContext()));
mChatTab.setTabListener(new MyTabsListener(mChatFragment,
                           getApplicationContext()));

我遇到了这个错误:类型不匹配:无法从 FindFragment 转换为 Fragment。所以我遵循修复错误建议并将代码更改为

// create the fragments
FindFragment mFindFragment = new FindFragment();

// bind the fragments to the tabs - set up tabListeners for each tab 
mFindTab.setTabListener(new MyTabsListener(mFindFragment,
                           getApplicationContext()));

现在,出现了一个新错误:构造函数 MyTabsListener(FindFragment, Context) 未定义。

以防万一导入很关键,这里是:

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

对于 myTabsListener:

  class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;
    public Context context;

    public MyTabsListener(Fragment fragment, Context context) {
        this.fragment = fragment;
        this.context = context;

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(context, "Reselected!", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(context, "Selected!", Toast.LENGTH_SHORT).show();
        ft.replace(R.id.container, fragment);
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(context, "Unselected!", Toast.LENGTH_SHORT).show();
        ft.remove(fragment);
    }

}

对于我的 FindFragment 类:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FindFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.findfragment, container, false);
    }


}

我在这里很困惑。我不确定这是否与我的导入、库设置或其他问题有关。提前致谢!

【问题讨论】:

  • 显示你的MyTabsListener类的代码。确保您的类 MyTabsListener 包含带有您定义的两个参数的构造函数。
  • 你的活动扩展和发布片段的导入
  • 请显示MyTabsListenerFindFragment 类。您应该将 extends Fragment 用于 FindFragment 类或将 MyTabsListener 的构造函数更改为 MyTabsListener(FindFragment ff, Context c)
  • 您在哪个班级编写了代码mChatTab.setTabListener(new MyTabsListener(mChatFragment,getApplicationContext()));?是 Fragment 的活动吗?请出示。
  • 发布标签监听器

标签: java android eclipse android-fragments types


【解决方案1】:

你需要改变这个

import android.support.v4.app.Fragment;
// you will use this import when you want fragment from support library 
// in that case you will extend FragmentActivity which is the base class for support based fragments

import android.app.Fragment;

FindFragment.java.

ChatFragment.java 中也可以这样做

【讨论】:

  • 感谢它现在正在工作!我只是想知道如果我使用 import android.support.v4.app.Fragment;然后我需要使用 FragmentActivity;如果我使用 import android.app.Fragment,那么我将需要使用 Fragment。我可以使用任何一对吗?
  • @JeffLam 您需要使用低于 11 的基于支持的片段。注意片段是在 api 级别 11 中引入的。如果需要,为了向后兼容,您将使用支持库中的片段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多