安卓ListView名称显示异常求助:列表项均显示类全限定名
问题分析与解决方案
看起来你遇到的核心问题是列表项显示的是类的全限定名而非自定义名称,另外代码里还存在类名混淆的小问题,我来一步步帮你解决:
核心问题原因
ArrayAdapter默认调用toString()方法:你用ArrayAdapter绑定ImageDisplay对象列表时,适配器会默认调用对象的toString()方法来生成列表项文本。而你的ImageDisplay类没有重写这个方法,所以会显示类的全限定名(也就是你看到的com.example.poweruser.fcemsandroid.obstetric)。- 类名大小写混淆:你的Model类是
ImageDisplay(首字母大写),但第二个Activity类名叫imagedisplay(全小写),虽然Java大小写敏感不会报错,但这种命名方式极易造成代码混淆,建议修正。
分步解决方案
1. 给ImageDisplay类重写toString()方法
让适配器能正确显示你想要的名称,只需在Model类中添加以下方法:
public class ImageDisplay { private String Name; private int Path; // 原有的构造方法、getter/setter保持不变 // 重写toString,返回要显示的名称 @Override public String toString() { return Name; } }
2. 修正类名,避免混淆
把第二个Activity的类名改为ImageDisplayActivity(和Model类明确区分),同时修正跳转Intent的目标类:
// 第一个Activity的onItemClick代码修正 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 这里跳转的是修正后的Activity类 Intent myIntent = new Intent(context, ImageDisplayActivity.class); myIntent.putExtra("name", myImageList.get(position).getName()); myIntent.putExtra("imagePath", myImageList.get(position).getPath()); startActivityForResult(myIntent, 0); } });
3. 优化第二个Activity的布局逻辑
你之前的代码先加载了布局文件,又立刻用setContentView(img)替换了整个布局,这会丢失原布局里的所有控件。如果需要保留布局(比如显示图片名称),可以把TouchImageView添加到布局容器中,示例如下:
public class ImageDisplayActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 先加载原有布局 setContentView(R.layout.activity_imagedisplay); Intent myIntent = getIntent(); String name = myIntent.getStringExtra("name"); int imagePath = myIntent.getIntExtra("imagePath", 0); // 初始化可缩放图片控件并添加到布局 TouchImageView img = new TouchImageView(this); img.setImageResource(imagePath); img.setMaxZoom(4f); // 假设布局里有一个id为image_container的LinearLayout容器 LinearLayout container = findViewById(R.id.image_container); container.addView(img); } }
完成以上修改后,你的ListView就能正确显示每个项的名称(Aspirin、Drug2等),同时代码结构更清晰,避免了类名混淆的问题。
内容的提问来源于stack exchange,提问作者beans217
相关产品推荐
相关产品推荐

