谷歌Android教程 - 不编译

时间:2015-01-06 13:30:14

标签: android android-studio

我按照本教程中的说明完成了所有操作: google android basic tutorial 尽管一切都按照描述完成,但代码拒绝编译3个错误。看起来像是在写这些东西的人忘了提到这些东西是什么以及我在哪里/如何定义它们。

我得到的错误:

Error:(24, 68) error: cannot find symbol variable container
Error:(36, 23) error: cannot find symbol variable action_settings
Error:(46, 54) error: cannot find symbol variable fragment_display_message

3个字段都没有在任何地方定义(也许其中一个库是错误的?) 有问题的文件是:

package com.example.asteroth.first;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.TextView;
import android.R;

public class DisplayMessageActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        setContentView(textView);
//        setContentView(R.layout.activity_display_message);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
        }

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public static class PlaceholderFragment extends Fragment {
        public PlaceholderFragment() { }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_display_message, container, false);
            return rootView;
        }
    }
}

我正在使用我刚下载的Android Studio,并且没有搜索或类似问题的问题指出这个问题,因此我怀疑教程的作者忘记提及一些小问题。我已经看到建议放置"容器"作为其中一个XML文件中的新ID,但无济于事。

编辑: 'cannot find symbol ActionBarActivity' following Android Development Tutorial? 这篇文章提出了一个解决方案,但它将ActionBarActivity更改为Activity,这与教程使用的内容非常不同,我不知道它会产生多大的影响

EDIT2: 发现和删除的问题:     import android.R //导致action_settings错误     容器丢失//必须将其作为id添加到xml文件中     xml文件命名错误//如果我说得对,我还在等待有经验的人澄清,但看起来教程使用的是xml文件的不同名称,然后是java代码引用的名称

剩下的问题与此类似 Cannot resolve method placeholderfragment error 但是,我都扩展了Fragment并包含了android.app.Fragment,可以在包含的文件中看到。

5 个答案:

答案 0 :(得分:2)

我现在正在2015年2月23日第一次做这个教程并遇到了这个编译错误,尽管我觉得我已经密切关注了这些步骤。我将fragment_display_message更改为activity_display_message,这是他们在教程中创建的XML文件。这似乎解决了错误,并允许应用程序运行。

// A placeholder fragment containing a simple view.
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() { }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_display_message,
                container, false);
        return rootView;
    }
}

答案 1 :(得分:0)

这是一个复制粘贴错误。 如果您使用“R”粘贴代码在其中,开发环境总是导入android.R:

import android.R;

如果你使用R.id ....它总是查找android.R而不是你自己生成的R类。 删除导入,它应该没问题。这个一般适用于我。

之后你必须检查你是否已经定义了id和布局。 您可以查看package explorer下的res->layout来查看布局。在您的示例中,必须有fragment_display_message.xml

对于id's,您必须查找所有布局并检查是否存在container等特定视图。

答案 2 :(得分:0)

添加此行以处理您的第一个错误:android:id = "@+id/container" 您收到该错误是因为container不在XML中。

添加<string name="action_settings">Action Settings</string>以便&#34;操作设置&#34;由于您有错误,因此我假设您的XML代码中不存在。

创建您自己的XML文件,使用这个确切的名称fragment_display_message.xml来处理该错误,并检查您可能需要在Google教程中插入哪些代码。通常使用Eclipse时,出于我所知的原因,不包括这些文件。所以你必须自己创建或插入它们。 (请确保顺便提供最新版本的SDK。

编辑:请务必使用与您的&#34;教程&#34;匹配的正确导入。我看了一眼,发现你错过了两次进口。其中一个用户回答了其中一个。

答案 3 :(得分:0)

我在构建简单用户界面步骤中遇到了类似的错误:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText android:id="@+id/edit_message"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/edit_message" />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send" />

我已将原因缩小到res / layout / activity_my.xml:

<?xml version="1.0" encoding="utf-8"?>

编译的原始版本(但没有按钮或文本框)是:

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context=".MyActivity">

<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
    android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
        android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_my" />

<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" />

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">

$(document).ready(function () {
    $("#ao-referrer-summary").on('click', '.btnDelete', function () {
        $(this).closest('tr').remove();
    });
});
</script>

答案 4 :(得分:0)

<强> fragment_display_message 确保res / layout文件夹中有一个名为fragment_display_message.xml的文件。

<强> action_settings 确保res / menu

中的menu.xml文件中包含该项目
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=
           ".MenuExampleActivity" >
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="1"
        app:showAsAction="never"
        android:title="My menu option"/>
</menu>

<强>容器 确保你有一个布局(例如RelativeLayout),id设置为&#34; container&#34;在res / layout的activity_main.xml文件中,假设它是代码插入片段的引用。