找不到适合makeText的方法

时间:2019-10-10 16:47:01

标签: java android

我似乎正在收到此错误,我是android studio的新手,我正尝试将数组中的名称获取到ListView中,然后当用户点击任意列表时,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)

这是我的活动


   import androidx.appcompat.app.AppCompatActivity;

   import android.os.Bundle;
   import android.view.View;
   import android.widget.AdapterView;
   import android.widget.ArrayAdapter;
   import android.widget.ListView;
   import android.widget.Toast;

  import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ListView listv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listv = (ListView) findViewById(R.id.listv);

        final ArrayList names = new ArrayList();

        names.add("Samuel");
        names.add("Manuel");
        names.add("King");

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, names);

        listv.setAdapter(adapter);

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

问题出在哪里,我该如何解决?

3 个答案:

答案 0 :(得分:2)

我认为您的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(position).toString(), Toast.LENGTH_LONG).show();

或2)您可以像这样初始化String时声明ArrayList的类型:

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

然后您对names.get(position)的呼叫应该返回String而不是Object

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

相关问题