android将对象成员从alertdialog传递回listview

android将对象成员从alertdialog传递回listview,android,listview,tabs,android-alertdialog,Android,Listview,Tabs,Android Alertdialog,我在选项卡Activity中有一个按钮,单击该按钮时,会打开一个AlertDialog,其中有2个EditTextViews`查看姓名和号码 当我点击Ok按钮来关闭对话框时,我想将名称传递回选项卡Activity上的列表视图中。我可以在选项卡activity上获取要传递回EditText框mAlertDialog的名称。但是在列表视图中显示的不是名称 它看起来像是对对象“widget”的引用(widget是类Device的对象,它具有getName,setName方法),com.mypackag

我在选项卡Activity
中有一个按钮,单击该按钮时,会打开一个
AlertDialog
,其中有2个
EditText
Views`查看姓名和号码

当我点击Ok
按钮来关闭
对话框时,我想将名称传递回
选项卡Activity
上的
列表视图中。我可以在
选项卡activity
上获取要传递回
EditText
mAlertDialog
的名称。但是在
列表视图中显示的不是名称

它看起来像是对对象“widget”的引用(
widget
是类
Device
的对象,它具有
getName
setName
方法),com.mypackage。Device@419226e0.

我将尝试在下面发布相关代码(是的,我知道我没有使用
片段
。我发现很难使用
片段
实现具有
列表视图
的水平滚动选项卡):

@SuppressWarnings(“弃用”)
公共类MainActivity扩展TabActivity实现OnClickListener{
公共静态ArrayList deviceList=新ArrayList();
公共静态ArrayAdapter deviceAdapter=null;
私有静态ListView设备ListView;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabHost=getTabHost();
TabHost.TabSpec;
意图;
rButton=(按钮)findviewbyd(R.id.Button_寄存器);
mAlertDialog=(EditText)findViewById(R.id.edittextresult\u Name);
rButton.setOnClickListener(onRegister);
意图=新意图(此,devices.class);
spec=mTabHost.newTabSpec(“设备”)
.setIndicator(“设备”)
.设置内容(R.id.devices);
mTabHost.addTab(规范);
deviceListView=(ListView)findViewById(R.id.rdevices);
//将阵列适配器连接到数据阵列“deviceList”
deviceAdapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,deviceList);
//将适配器“deviceAdapter”连接到listview小部件,以便使用数组中的数据填充活动listview
deviceListView.setAdapter(deviceAdapter);
}
private View.OnClickListener onRegister=new View.OnClickListener(){
公共void onClick(视图v){
String title=“寄存器”;
字符串按钮nok=“OK”;
字符串按钮取消=“取消”;
字符串madd=“地址”;
String name=“小部件名称”;
//获取rdevice.xml视图
LayoutInflater li=LayoutInflater.from(上下文);
视图rView=li.充气(R.layout.rd设备,空);
AlertDialog.Builder adRegister=新建AlertDialog.Builder(上下文);
//将rdevice.xml设置为Addresser builder
地址:setView(rView);
//定名
地址:setTitle(标题);
//设置EditText视图以获取用户输入
final EditText mField=(EditText)rView.findViewById(R.id.EditText_地址);
final EditText nField=(EditText)rView.findviewbyd(R.id.EditText\u WidgetName);
//设置对话框消息
adRegister.setMessage(“消息”)
.setCancelable(错误)
.setPositiveButton(buttonOk,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int按钮为正){
//TODO自动生成的方法存根
设备小部件=新设备();
字符串madd=mField.getText().toString();
字符串名称=nField.getText().toString();
widget.setName(name);
widget.setAddress(madd);
Log.d(标签,“地址:+madd”);
Log.d(标签,“小部件名称:”+名称);
//获取用户输入并将其设置为主活动的结果
mAlertDialog.setText(nField.getText());
添加(小部件);
deviceAdapter.notifyDataSetChanged();
}
})
.setNegativeButton(buttonCancel,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int按钮\u负数){
}
});
//创建警报对话框
AlertDialog AlertDialog=adRegister.create();
//表现出来
adRegister.show();
}
};
调试时,logcat中没有错误

但是,当我看到表达式
mAlertDialog
时,它会说

无法检索此文件的正确封闭实例

即使应用程序中显示了正确的名称。当我在调试后让程序完成时,此引用将显示在
列表视图
“com.mypackage中。Device@419226e0“而不是我在
AlertDialog
框中键入的名称


这与作用域或匿名内部类有关吗?请提供帮助。我对Java不太熟悉,所以我在这里迷失了方向。

好的,我让它工作起来了。这非常有用:,特别是这句话

您可能想知道ListView将如何显示Product对象以及将显示Product对象的哪个属性。答案很简单,默认情况下,Android ListView控件在每个ListView项中呈现一个简单的TextView,TextView控件只能显示简单的文本。请注意toString()是如何显示的函数在我们上面定义的Product类中被重写。从object toString()函数返回的任何字符串都将显示在ListView项中呈现的TextView中

基本上,在我的Device.java类中,我必须重写toString方法来指定要传递的对象成员,因此我包含了以下代码

@Override
public String toString(){
    return this.name;
}
mAlertDialog.setText(nField.getText());
-As
nField@Override
public String toString(){
    return this.name;
}