Android Eclipse到Android Studio

Android Eclipse到Android Studio,android,eclipse,android-fragments,android-studio,Android,Eclipse,Android Fragments,Android Studio,自从宣布退出Eclipse支持以来,我正在将我的应用程序从Eclipse内置的minSdk 8 targetSdk 19移动到Android Studio内置的minSdk 14 targetSdk 22 我不想让Android Studio执行转换,而是想创建一个新项目并手动移植代码 我卡住了 我有一个从AppCompatActivity扩展而来的主活动,它使用一个导航抽屉和一个工具栏,所有这些都可以正常工作。我的片段也可以加载,直到我尝试引用工具栏 我的主要活动代码是: public cla

自从宣布退出Eclipse支持以来,我正在将我的应用程序从Eclipse内置的minSdk 8 targetSdk 19移动到Android Studio内置的minSdk 14 targetSdk 22

我不想让Android Studio执行转换,而是想创建一个新项目并手动移植代码

我卡住了

我有一个从AppCompatActivity扩展而来的主活动,它使用一个导航抽屉和一个工具栏,所有这些都可以正常工作。我的片段也可以加载,直到我尝试引用工具栏

我的主要活动代码是:

public class MainActivity extends AppCompatActivity implements BlankTestFragment.OnFragmentInteractionListener {
private Toolbar toolbar;  
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    setSupportActionBar(toolbar);
    ...
    ...
我加载的片段代码是:

public class BlankTestFragment extends Fragment {
...
private Toolbar toolbar;
...
public static BlankTestFragment newInstance(String param1, String param2) {
    BlankTestFragment fragment = new BlankTestFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

public BlankTestFragment() {
    // Required empty public constructor
}

public final static String TAG = BlankTestFragment.class.getSimpleName();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

   toolbar = ((AppCompatActivity)getActivity()).getSupportActionBar();

}
最后一行报告:

Incompatible Types:
Required: android.support.v7.widget.Toolbar
Found: android.support.v7.app.Actionbar
那么,出了什么问题?Actionbar参考来自哪里

解决方案

在主要活动中,我添加了:

public static Toolbar getToolbar(){
    return toolbar;
}
在我的测试片段中,在Nantach中,我添加了:

toolbar = MainActivity.getToolbar();
toolbar.setTitle("hello");
解决方案2

事实证明,我的测试片段中只有一个小错误,使我的原始实现无法工作

在MainActivity中,我将工具栏设置为SupportActionBar。所以当我试着

toolbar = ((AppCompatActivity)getActivity()).getSupportActionBar();
在片段中,我将工具栏设置为

private Toolbar toolbar;
但那时它已经不是工具栏了,所以我把它改成了

private ActionBar toolbar;
一切都很顺利

Actionbar参考来自哪里

getSupportActionBar()
的返回值是
android.support.v7.app.ActionBar的一个实例,如中所示。不能将其分配给
工具栏
字段,因为
工具栏
不继承自
操作栏


在封面下,
setSupportActionBar()
将您的
工具栏
包装到另一个对象中。我看不到一个简单的方法来恢复
工具栏。因此,请尝试使用
ActionBar
包装,该包装将
getSupportActionBar()
返回。

删除代码
getActivity()).getSupportActionBar()。只需将其替换为从
main活动
获取
工具栏
的代码,方法是从该活动调用公共get方法。Commonware已经给出了一个很好的提示。

谢谢,我已经在问题的底部添加了我的解决方案版本。谢谢。你的评论加上公共软件帮助我达成了一个共识solution@DaveSav,你可以将两个贴出的答案都选为有用的,表示赞赏。祝你好运,玩得开心!你的解决方案很糟糕。如果你在另一个活动中使用该片段会发生什么?你需要工具栏做什么?我不会在另一个活动中使用该片段。那么你的解决方案是什么?我需要工具栏来挂起我的工具。我猜njzk2的问题是缺乏灵活性。IMHO,更大的问题是你正在像筛子一样泄漏内存。不要将小部件放在静态数据成员中。如果您想与宿主活动对话,您的片段可以调用
getActivity()
并与实例对话,而不是与类对话,在实例上调用一些
getToolbar()
。njzk2的问题可以通过将
getActivity()
转换为某种接口来解决,而不是像
MainActivity
这样的具体类,这样片段就不会绑定到特定的宿主活动类。