找不到适合 makeText 的方法

No suitable method found for makeText

我似乎遇到了这个错误,我是 Android Studio 的新手,我正在尝试将名称从数组中获取到 ListView 然后当用户点击任何列表 a Toast 被激活。但我似乎被下面的这个错误所困:

error: no suitable method found for makeText(MainActivity,Object,int)
method Toast.makeText(Context,CharSequence,int) is not applicable
(argument mismatch; Object cannot be converted to CharSequence)
method Toast.makeText(Context,int,int) is not applicable
(argument mismatch; Object cannot be converted to int)

这是我的代码:

final ArrayList names = new ArrayList();
names.add("Samuel");
names.add("Manuel");
names.add("King");

listv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, names.get(position), Toast.LENGTH_LONG).show();
    }
});

这是什么问题,我该如何解决?

我认为您的 ArrayList 默认为 Object 类型,因为您在实例化它时没有指定 String。如果这是真的,那么当你调用 names.get(position) 时,它会返回一个 Object 而不是 String,这会给你带来问题,因为 Toast.makeText() 方法需要参数类型 (Context,CharSequence,int) 而不是你传递的是 (Context,Object,int)

请注意,在这种情况下,CharSequenceString 可以视为相同。

如果这个理论是正确的,您可以通过几种不同的方式解决问题。

  1. 您可以调用 toString() 将您的对象显式转换为字符串。像这样:

    Toast.makeText(MainActivity.this, names.get(位置).toString(), Toast.LENGTH_LONG).show();

或 2) 您可以在初始化 ArrayList 时声明 String 的类型,如下所示:

final ArrayList<String> names = new ArrayList<>();

那么你对 names.get(position) 的调用应该返回 String 而不是 Object

更改为:

Toast.makeText(MainActivity.this, String.valueOf(names.get(position)), Toast.LENGTH_LONG).show();

Toast class 中没有方法 makeText(MainActivity, Object, int) 与此 arg 这就是您收到此错误的原因。