【问题标题】:R.java won't generateR.java 不会生成
【发布时间】:2014-05-03 01:54:55
【问题描述】:

我目前正在处理一个项目,其中我将 ListView 的适配器从 ArrayAdapter 更新为自定义 CursorAdapter。

在将新的<string></string> 插入res/string.xml 文件后,我有意删除了R.java 以重新生成R.java 文件,因为它不会自动重新生成。该文件未生成。

我继续调试,并运行Project->Clean... 以尝试重新生成R.java 文件。这也不起作用。

检查 StackOverflow 后,我也尝试更改 AndroidManifest.xml 中的版本,希望重新生成文件。这也没有奏效。我尝试了其他一些技巧,希望 Eclipse 可以重新生成文件。没有运气。

有人知道吗?我的最后期限很紧,这真的让我望而却步。

这是出现问题时我正在处理的文件:

package com.renaissanceartsmedia.gradingapp.controllers.fragments;

import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.util.ArrayMap;
import android.support.v4.widget.CursorAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

import com.renaissanceartsmedia.gradingapp.R;
import com.renaissanceartsmedia.gradingapp.controllers.activities.CourseActivity;
import com.renaissanceartsmedia.gradingapp.model.Course;
import com.renaissanceartsmedia.gradingapp.model.CourseStore;
import com.renaissanceartsmedia.gradingapp.model.GradingAppDatabaseHelper.CourseCursor;

public class CourseListFragment extends ListFragment {

    // DEBUG
    private static final String TAG = "CourseListFragment";

    // Create an ArrayList<String> to store flashcards
    ArrayList<Course> mCourses;
    ArrayMap<Long, Course> mCoursesById;

    // Cursor Object
    private CourseCursor mCursor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set the Title of the Fragment's Activity
        getActivity().setTitle(R.string.course_list);

        // Load Cursor to DB
        mCursor = CourseStore.get(getActivity()).queryCourses();

        // Set the list of FlashcardListFragments
        mCourses = CourseStore.get(getActivity()).getCourses();
        mCoursesById  = CourseStore.get(getActivity()).getCoursesById();

        // Create an ArrayAdapter to use for displaying FlashcardListFragments in FlashcardListActivity
        /*
        ArrayAdapter<Flashcard> adapter = new ArrayAdapter<Flashcard>(
                                                                    getActivity(),
                                                                    android.R.layout.simple_list_item_1,
                                                                    mFlashcards);
        */

        // OLD METHOD
        //ListItemLayoutAdapter adapter = new ListItemLayoutAdapter(mCourses);
        CourseCursorAdapter adapter = new CourseCursorAdapter(getActivity(), mCursor);

        // Set the adapter for the list
        setListAdapter(adapter);
    }


    /* Handles a user selection of a FlashcardListFragment
     * 
     */
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        //Flashcard f = (Flashcard)(getListAdapter()).getItem(position);
        // OLD WAY
        //Course c = ((ListItemLayoutAdapter)getListAdapter()).getItem(position);

        /*
        Course c = ((CourseCursorAdapter))getListAdapter());
        Log.d(TAG, c.getCourseTitle() + " was clicked");


        // Start a new activity using an Intent
        Intent openFlashcardDetail = new Intent(getActivity(), CourseActivity.class);

        // Add EXTRAS to the intent
        //openFlashcardDetail.putExtra(FlashcardFragment.EXTRA_FLASHCARD_ID, f.getId());
        openFlashcardDetail.putExtra(Course.EXTRA_COURSE_ID, c.getId());

        startActivity(openFlashcardDetail);
        */

    }

    // OLD METHOD
    //class ListItemLayoutAdapter extends ArrayAdapter<Course> {
    class CourseCursorAdapter extends CursorAdapter {

        // Member Properties
        // OLD METHOD
        Course mCurrentListObject;
        CourseCursor mCourseCursor;

        // Constructor
        // OLD METHOD
        /*
        public ListItemLayoutAdapter(ArrayList<Course> itemContent) {
            super(getActivity(), 0, itemContent);

        }
        */

        public CourseCursorAdapter(Context context, CourseCursor cursor) {
            super(context, cursor, 0);
            mCourseCursor = cursor;
        }
        // OLD WAY
        /*
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //If we weren't given a view, inflate a new view
            if (convertView == null) {
                convertView = getActivity().getLayoutInflater()
                        .inflate(R.layout.list_item_layout, null);
            }

            // Configure the view for this object
            mCurrentListObject = getItem(position);

            // Make Connections from Layout to Java code
            TextView mainTextView = (TextView) convertView.findViewById(R.id.item_main_text);
            TextView subTextView = (TextView) convertView.findViewById(R.id.item_sub_text);

            // Set the Contents of the Views
            mainTextView.setText(setMainText());
            subTextView.setText(setSubText());

            return convertView;
        }
        */

        @Override 
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            // Use a layout Inflater to get a row view
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            return inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            // Get the course for the current row
            Course course = mCourseCursor.getCourse();

            // Setup a new TextView
            TextView courseTitleTextView = (TextView)view;
            String mainText = context.getString(R.string.course_title_hint, course.getCourseTitle());
            courseTitleTextView.setText(mainText);


        }



        public String setMainText() {
            return mCurrentListObject.getCourseTitle();
        }
        public String setSubText() {
            return mCurrentListObject.getSubject();
        }

    }
}

【问题讨论】:

  • 你有什么错误吗?尝试检查问题和控制台选项卡。
  • 您刚刚删除了 R 或整个 gen 文件夹?
  • 我的所有错误都与不存在的 R.java 文件有关。对字符串或布局的引用以及 R.java 导入语句。
  • 确保 res 文件夹中没有错误,因为它们更难被发现。布局错误会阻止构建 R 文件的 adk,因此您会看到很多关于 Missing R 的错误。
  • 我只是删除了 R 而不是整个 gen 文件夹

标签: java android eclipse


【解决方案1】:

我有解决方案,希望对您有所帮助。 !!

步骤 1) 更改构建目标

例如,如果您选择 2.2 作为构建目标,则选择您拥有的最大值。 (如4.4)

如果您选择了 4.4,则选择 4.3 作为目标。

第 2 步)清理项目

它将再次创建 R.java

谢谢。

【讨论】:

    【解决方案2】:

    如果您在 Eclipse 上打开您的问题视图(窗口 -> 显示视图 -> 问题)并在您的资源或清单中查找错误

    【讨论】:

    • “问题”窗格中没有列出与 rsc 或清单相关的错误
    【解决方案3】:

    尝试重新启动 eclipse,有时它会成功。检查你是否使用 jdk 7,它只需要 jdk 6。

    【讨论】:

      【解决方案4】:

      这通常是因为您的 XML 或资源文件名中存在问题。 尝试重新启动 Eclipse,如果它仍然没有指出问题所在,请尝试追溯您在此问题发生之前对 XML 文件所做的最后更改的步骤。您会在某处发现某种语法错误或拼写错误或无效的文件名。修复它然后再次清洁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        相关资源
        最近更新 更多