添加资产文件夹后导航中出现“错误:R 包不存在”:Android Studio

Joe*_*vin 11 java android kotlin android-studio android-navigation

自从将 Assets 文件夹添加到我的项目后,我现在得到:

error: package R does not exist
"return new ActionOnlyNavDirections(R.id.action_newAlarmFragment_to_homeFragment);"
Run Code Online (Sandbox Code Playgroud)

这是来自此自动生成的代码:

import androidx.annotation.NonNull;
import androidx.navigation.ActionOnlyNavDirections;
import androidx.navigation.NavDirections;

public class SetNewAlarmFragmentDirections {
  private SetNewAlarmFragmentDirections() {
  }

  @NonNull
  public static NavDirections actionNewAlarmFragmentToHomeFragment() {
    return new ActionOnlyNavDirections(R.id.action_newAlarmFragment_to_homeFragment);
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试清理和重建项目,并尝试按照评论中的建议“使缓存无效并重新启动”

浏览这里的其他回答的问题,似乎它可能是 R. 的导入导致了这个问题,但我找不到任何东西..

NavDirection 本身来自这个片段:

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CompoundButton
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.Navigation
import com.pleavinseven.alarmclockproject.alarmmanager.AlarmManager
import com.pleavinseven.alarmclockproject.data.model.Alarm
import com.pleavinseven.alarmclockproject.data.viewmodel.AlarmViewModel
import com.pleavinseven.alarmclockproject.databinding.FragmentSetNewAlarmBinding
import com.pleavinseven.alarmclockproject.util.TimePickerUtil
import java.util.*


class SetNewAlarmFragment : Fragment() {

    private val timePickerUtil = TimePickerUtil()
    lateinit var binding: FragmentSetNewAlarmBinding
    private lateinit var alarmViewModel: AlarmViewModel


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

        binding = FragmentSetNewAlarmBinding.inflate(inflater, container, false)

           binding.fragmentCreateAlarmRecurring.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { _, isChecked ->
        if (isChecked) {
            binding.fragmentCreateAlarmRecurring.visibility = View.VISIBLE
        } else {
            binding.fragmentCreateAlarmRecurring.visibility = View.GONE
        }
    })

    alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]


    binding.fragmentBtnSetAlarm.setOnClickListener(View.OnClickListener { _ ->
        scheduleAlarm()
        Navigation.findNavController(requireView())
            .navigate(com.pleavinseven.alarmclockproject.R.id.action_newAlarmFragment_to_homeFragment)
    })
    return binding.root


}
Run Code Online (Sandbox Code Playgroud)

导航 XML:

?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/alarm_nav"
app:startDestination="@id/homeFragment">

<fragment
    android:id="@+id/homeFragment"
     android:name="com.pleavinseven.alarmclockproject.fragments.HomeFragment"
    android:label="fragment_home"
    tools:layout="@layout/fragment_home" >
    <action
        android:id="@+id/action_homeFragment_to_newAlarmFragment"
        app:destination="@id/newAlarmFragment" />
    <action
        android:id="@+id/action_homeFragment_to_updateFragment"
        app:destination="@id/updateFragment" />
</fragment>
<fragment
    android:id="@+id/newAlarmFragment"
    android:name="com.pleavinseven.alarmclockproject.fragments.SetNewAlarmFragment"
    android:label="NewAlarmFragment" >
    <action
        android:id="@+id/action_newAlarmFragment_to_homeFragment"
        app:destination="@id/homeFragment" />
</fragment>
<fragment
    android:id="@+id/updateFragment"
    android:name="com.pleavinseven.alarmclockproject.fragments.UpdateFragment"
    android:label="UpdateFragment" >
    <action
        android:id="@+id/action_updateFragment_to_homeFragment"
        app:destination="@id/homeFragment" />
    <argument
        android:name="currentAlarm"
        app:argType="com.pleavinseven.alarmclockproject.data.model.Alarm" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

mit*_*221 36

只需将包名称从 build.gradle 应用程序级别移至清单即可。

android  { 
    namespace 'com.example.app' //remove this
}
Run Code Online (Sandbox Code Playgroud)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"> //add this
Run Code Online (Sandbox Code Playgroud)