有没有办法在eclipse中为android重新生成R.java编程?

时间:2014-01-03 00:53:31

标签: android

我刚刚做了一个干净的构建我正在研究的java教程,似乎gen目录中的R.java文件消失了。有没有办法告诉eclipse重新生成该文件?

最初,我遇到的问题是xml文件中的id无法在findViewById()中被识别。所以我做了一个Project / clean ...来更新R.java文件以包含缺少的id。

令我沮丧的是,R.java刚刚消失了。我没有找到无法找到id的错误,而是收到一个错误,即无法找到变量R(R.id.crime_title)。不知道从哪里开始。

activity_crime.xml

<FrameLayout 

xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" >

</FrameLayout>

fragment_crime.xml

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

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<EditText
    android:id="@+id/crime_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/crime_title_hint" /> </LinearLayout>

CrimeActivity.java

package com.example.criminalintent;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

public class CrimeActivity extends FragmentActivity {
//called when the activity is first created.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_crime);
    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

    if(fragment == null){
        fragment = new CrimeFragment();
        fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
    }
    }

}

crimeFragment.java

package com.example.criminalintent;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class CrimeFragment extends Fragment {
private Crime mCrime;
private EditText mTitleField;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    mCrime = new Crime();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
        Bundle savedInstanceState){
    ViewGroup v = (ViewGroup)inflater.inflate(R.layout.fragment_crime, null);

    mTitleField = (EditText) v.findViewById(R.id.crime_title);
    mTitleField.addTextChangedListener(new TextWatcher(){

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTextChanged(CharSequence c, int start, int before,
                int count) {
            mCrime.setTitle(c.toString());
        }

    });

    return v;
}
}

5 个答案:

答案 0 :(得分:1)

在菜单栏中,点击

Project -> Clean

这将重新生成R文件,如果无法创建,请检查输出控制台是否有任何无法正确构建的XML文件。

答案 1 :(得分:1)

如果您清理并消失,则表示无法正确重建。如果您在代码中的任何位置都没有看到任何明显的红色,请检查您的XML,因为有时它被Eclipse非常好地隐藏了。通过,当你确定它应该编译时,再次清理并重建R.java。

从记忆中,我认为它会在问题自动修复后立即重建,但我不确定。

答案 2 :(得分:1)

R.java是由ADT完成的自动生成的文件。无法手动生成/编辑它。因此,如果你的R.java没有生成,那就意味着代码中存在一些错误(XML / Java)。请解决它们,瞧,你的R.java会被生成。 如果您在解决错误方面需要任何帮助,请分享错误,以便我们帮助您解决错误。

答案 3 :(得分:0)

似乎我在字符串文件中缺少一个字符串......这就是导致构建中的错误的原因。一旦将其添加回来(我根据教程删除了它),所有内容都会重新编译。

答案 4 :(得分:0)

检查您的res/menu folder是否有文件crime.xml,其中的条目指向字符串android:title="@string/action_settings"

因此,在资源res/values/strings.xml的{​​{1}}中添加此行。然后转到

<string name="action_settings">Settings</string>

如果您已自动选择menu -> project -> clean and rebuilt ,则会自动生成project->rebuilt个文件。