我刚刚做了一个干净的构建我正在研究的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;
}
}
答案 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
个文件。