我似乎正在收到此错误,我是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();
}
});
}
}
问题出在哪里,我该如何解决?
答案 0 :(得分:2)
我认为您的ArrayList
默认为类型Object
,因为在实例化时未指定String
。如果这是真的,那么当您调用names.get(position)
时,它将返回一个Object
而不是一个String
,这会给您带来问题,因为Toast.makeText()
方法需要参数类型(Context,CharSequence,int)
,而不是(Context,Object,int)
请注意,在这种情况下,CharSequence
和String
出于您的目的可以被视为相同。
如果该理论正确,则可以通过几种不同的方法解决该问题。
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)方法,这就是您收到此错误的原因。