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

时间:2012-08-17 15:53:48

标签: android listview tabs alertdialog

我在TabActivity that when clicked, opens an AlertDialog with 2 EditText Views`中有一个名称和数字的按钮。

当我点击确定Button关闭Dialog时,我想将该名称重新传递回ListView上的TabActivity。我可以将名称传回EditText上的mAlertDialogTabActivity。但ListView

中显示的不是名称

它看起来像对象“小部件”的引用(Widget是类Device的对象,具有getNamesetName方法),com。 mypackage.Device@419226e0。

我会尝试在下面发布相关代码(是的,我知道我没有使用Fragments。我发现很难用ListView和{{1}实现水平滚动标签}):

Fragments

在调试时,logcat中没有错误。

但是,当我看到表达式@SuppressWarnings("deprecation") public class MainActivity extends TabActivity implements OnClickListener { public static ArrayList<Device> deviceList = new ArrayList<Device>(); public static ArrayAdapter<Device> deviceAdapter=null; private static ListView deviceListView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTabHost= getTabHost(); TabHost.TabSpec spec; Intent intent; rButton = (Button)findViewById(R.id.button_register); mAlertDialog = (EditText)findViewById(R.id.edittextresult_Name); rButton.setOnClickListener(onRegister); intent = new Intent (this, devices.class); spec = mTabHost.newTabSpec("devices") .setIndicator("Devices") .setContent(R.id.devices); mTabHost.addTab(spec); deviceListView=(ListView)findViewById(R.id.rdevices); //Attach array adapter to data array "deviceList" deviceAdapter = new ArrayAdapter<Device>(this,android.R.layout.simple_list_item_1, deviceList); //connect adapter "deviceAdapter" to listview widget so the activity listview is populated with data from the array deviceListView.setAdapter(deviceAdapter); } private View.OnClickListener onRegister = new View.OnClickListener() { public void onClick(View v) { String title = "Register"; String buttonOk = "OK"; String buttonCancel = "Cancel"; String madd = "address"; String name = "widget name"; //get rdevice.xml view LayoutInflater li = LayoutInflater.from(context); View rView = li.inflate(R.layout.rdevice, null); AlertDialog.Builder adRegister = new AlertDialog.Builder(context); //set rdevice.xml to adRegister builder adRegister.setView(rView); //set title adRegister.setTitle(title); //Set EditText views to get user input final EditText mField = (EditText)rView.findViewById(R.id.editText_Address); final EditText nField = (EditText)rView.findViewById(R.id.editText_WidgetName); //set dialog message adRegister.setMessage("Message") .setCancelable(false) .setPositiveButton(buttonOk, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int BUTTON_POSITIVE) { // TODO Auto-generated method stub Device widget = new Device(); String madd = mField.getText().toString(); String name = nField.getText().toString(); widget.setName(name); widget.setAddress(madd); Log.d(TAG, "Address: " + madd); Log.d(TAG, "Widget name: " + name); //get user input and set it to result on main activity mAlertDialog.setText(nField.getText()); deviceAdapter.add(widget); deviceAdapter.notifyDataSetChanged(); } }) .setNegativeButton(buttonCancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int BUTTON_NEGATIVE) { } }); //Create alert dialog AlertDialog alertDialog = adRegister.create(); //show it adRegister.show(); } }; 时,它会说

  

无法检索此

的正确封闭实例

即使应用程序中显示正确的名称。当我在调试后让程序完成时,此引用显示在mAlertDialog“com.mypackage.Device@419226e0”中,而不是我在ListView框中输入的名称。

这是否与范围或匿名内部类有关?请帮忙。我对Java并不熟悉,所以我迷失在这里的螺母和螺栓中。

1 个答案:

答案 0 :(得分:0)

好的,我得到了它的工作。这非常有用:http://www.ezzylearning.com/tutorial.aspx?tid=6816874,特别是这句话

  

您可能想知道ListView将如何显示Product对象以及Product对象的哪个属性将被显示。答案很简单,默认情况下Android ListView控件在每个ListView项内部呈现一个简单的TextView,而TextView控件只能显示简单的文本。注意如何在我们上面定义的Product类中覆盖toString()函数。无论您将从对象toString()函数返回的String将显示在ListView项目中呈现的TextView中。

基本上,在我的Device.java类中,我不得不重写toString方法来指定要传递的对象成员,所以我包含了这段代码

@Override
public String toString(){
    return this.name;
}