【问题标题】:Weird issues with semicolons, and with 'cannot resolve ...'分号和“无法解决...”的奇怪问题
【发布时间】:2018-08-08 15:11:46
【问题描述】:

我最近一直在跟进有关 Android 应用程序开发的教程,但由于某些错误,我的代码无法构建。我已经完成了错误告诉我的操作(放置分号),但这导致发生意外的令牌错误。

这是我的代码:

package nl.yourikuilman.android.ultimatemcnews;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import static nl.yourikuilman.android.ultimatemcnews.fun.showNewsFragment;

public class MainActivity {
    public void AppCompatActivity() {
        override fun;
            onCreate(savedInstanceState) {
                super.onCreate(savedInstanceState) {
                setContentView(R.layout.activity_main);

                showNewsFragment();
            }
        }
    }
}
public class fun {
    public static void showNewsFragment(){
        val tag="NewsListFragment";
        val existingFragmentWithTag=supportFragmentManager.findFragmentByTag(tag);

        if(existingFragmentWithTag==null){
            supportFragmentManager.beginTransaction()
                    .add(R.id.newsListFragmentContainer,NewsListFragment(),tag)
                    .commit();
        }
    }
}

我已经在 Android Studio 中编写了它,并且还在同一个项目中使用了 Kotlin。这是我的 java 代码的错误列表(为了让 Android Studio 扔给我):

  • 无法解析符号“覆盖”
  • 无法解析方法“onCreate(?)”
  • 无法解析符号“savedInstanceState”
  • 无法解析方法“onCreate(?)”
  • 无法解析符号“savedInstanceState”
  • 无法解析方法“setContentView(int)”
  • 无法解析符号“val”(连续 2 次出现此问题)
  • 无法解析符号“supportFragmentManager”(连续 2 次获得此问题)
  • 预期方法调用(这是来自 Android Studio 的注释,不是错误)[这点 '.add(R.id.newsListFragmentContainer,NewsListFragment(),tag)' 出来, 更具体:“NewsListFragment()”被指出]。

【问题讨论】:

  • 以前从未使用过 Kotlin。但是这段代码应该是 java 还是 Kotlin?如果是 Java,那么这里有很多问题。得到你的答复后我会解释的
  • 你不能将一个活动嵌套到另一个活动中......并且你应该在使用它们之前初始化你的变量。
  • 好玩后不用分号override fun; onCreate
  • 您似乎将 java 和 kotlin 混合在一个文件中。你应该分开保存 java 代码和 kotlin 代码。
  • kotlin 中没有 staticvoid 关键字。改为阅读 companion objectUnit

标签: java android kotlin


【解决方案1】:

您不应该像在 Java 中那样在 Kotlin 代码中使用分号——它们是不必要的混乱。您的代码应该更符合以下内容:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState) {
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main)

        showNewsFragment()
    }

    fun showNewsFragment() {
        val tag = "NewsListFragment"
        val existingFragmentWithTag = supportFragmentManager.findFragmentByTag(tag)

        if (existingFragmentWithTag == null) {
            supportFragmentManager.beginTransaction()
                    .add(R.id.newsListFragmentContainer, NewsListFragment(), tag)
                    .commit()
        }
    }

}

顺便说一句:如果您还不熟悉 Java,我会坚持使用它,直到您了解基础知识后再开始使用 Kotlin。从长远来看,它将对您有所帮助,尤其是在使用 Android 时(因为大多数库和 SDK 都是 Java)。另外:虽然 Java/Kotlin 具有 100% 的互操作性,但它们仍然需要位于单独的文件中(您的示例混合了两种语言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2021-07-24
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多