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

11
自从向我的项目添加了一个资产文件夹后,现在我收到以下提示:
error: package R does not exist
"return new ActionOnlyNavDirections(R.id.action_newAlarmFragment_to_homeFragment);"

这段代码是自动生成的:

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

我已尝试清理和重建项目,并尝试了评论中建议的"Invalidate caches and restart"。

通过查看其他已回答的问题,似乎可能是某个地方导入了 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


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

你尝试过“使缓存无效并重启”吗? - Gavin Wright
如果您删除刚刚添加的Assets文件夹会怎样呢?我认为您可能添加不正确,因此Android Studio无法编译应用程序的资源。 - Gavin Wright
你能同时将你的导航图XML代码发布出来吗?请更新原始帖子并包含它。 - Gavin Wright
已更新导航图XML。 - Joe Pleavin
你是否正在使用Safeargs?如果是,你确定已经正确设置了吗? - Gavin Wright
显示剩余11条评论
2个回答

35

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

来自

android  { 
    namespace 'com.example.app' //remove this
}

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"> //add this

谢谢,有什么想法吗? - Jesus Dimrix
请问您能具体说明原因吗? - Mohammad Misbah

1
问题似乎在于AS建议将包名移动到build.gradle而不是Android Manifest中,这导致导航时出现了错误。

这个链接似乎不正确,或者我不理解你所做的连接。 - Saul Aryeh Kohn
1
@SaulAryehKohn 那个链接完全是错误的。我不知道为什么我没有注意到它,也没有人在一年多的时间里指出它,但现在已经消失了。如果我找到一个相关的链接,我会稍后再编辑它。 - Joe Pleavin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接