繁体   English   中英

有没有一种方法可以在Eclipse中为Android重新生成R.java编程?

[英]is there a way to regenerate R.java programming for android in eclipse?

我只是做了一个干净的工作,并在我正在处理的Java教程上构建,似乎gen目录中的R.java文件消失了。 有什么办法告诉Eclipse重新生成该文件?

最初,我在findViewById()中无法识别xml文件中的ID时遇到问题。 所以我做了一个项目/清理...来更新R.java文件以包括缺少的ID。

令我沮丧的是,R.java刚刚消失了。 而不是得到无法找到id的错误,我得到了无法找到(R.id.crime_title的)变量R的错误。 不知道从这里去哪里。

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;
}
}

在菜单栏中,单击

Project -> Clean

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

如果您清理了它并消失了,则表明它无法正确重建。 如果您在代码的任何地方都看不到任何明显的红色,请检查您的XML,因为有时Eclipse会将其隐藏得非常好。 仔细检查一下,确定可以编译时,再次清理,然后将重新构建R.java。

从内存来看,我认为一旦问题自动修复,它将很快重建,但我不确定。

R.java是由ADT自动生成的文件。 不能手动生成/编辑它。 因此,如果未生成R.java,则意味着您的代码(XML / Java)中存在一些错误。 请解决它们,瞧,您将生成R.java。 如果您在解决错误方面需要任何帮助,请分享错误,以便我们为您提供帮助。

看来我在字符串文件中丢失了一个字符串...这就是导致生成错误的原因。 一旦将其重新添加(我按照教程将其删除),所有内容将再次编译。

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

因此,将此行添加到资源<string name="action_settings">Settings</string>中的res/values/strings.xml中。 然后去

menu -> project -> clean and rebuilt

如果您已经选择了project->rebuilt自动,那么它将自动生成R.java文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM