3

名前と番号のTabActivity that when clicked, opens anAlertDialog with 2EditText Viewsにボタンがあります。

[OK] をクリックしてButtonを閉じると、名前を のにDialog戻したいと思います。のボックスに戻す名前を取得できます。しかし、名前以外のものが に表示されています。ListViewTabActivityEditTextmAlertDialogTabActivityListView

これは、オブジェクト「widget」(メソッドを持つWidgetクラスのオブジェクト) com.mypackage.Device@419226e0への参照のように見えます。DevicegetNamesetName

関連するコードを以下に投稿してみます (はい、使用していないことはFragmentsわかっています。 with を使用して水平スクロール可能なタブを実装するのは難しいことがわかりましたListView) Fragments

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

        }

    };

デバッグでは、logcat にエラーはありません。

しかし、その表情を見るmAlertDialogと、

これの正しい囲みインスタンスを取得できません

アプリには正しい名前が表示されますが。デバッグ後にプログラムを終了させると、ボックスListViewに入力した名前ではなく、この参照が「com.mypackage.Device@419226e0」に表示されAlertDialogます。

これは、スコープまたは匿名の内部クラスと関係がありますか? 助けてください。私はJavaにあまり詳しくないので、ここで基本的なことを理解していません。

4

1 に答える 1

1

わかりました、動作しました。これは非常に役に立ちました:http ://www.ezzylearning.com/tutorial.aspx?tid = 6816874 、特にこの引用

ListViewがProductオブジェクトをどのように表示し、Productオブジェクトのどのプロパティが表示されるのか疑問に思われるかもしれません。答えは非常に単純です。デフォルトでは、Android ListViewコントロールはすべてのListViewアイテム内に単純なTextViewをレンダリングし、TextViewコントロールは単純なテキストのみを表示できます。上で定義したProductクラスでtoString()関数がどのようにオーバーライドされているかに注目してください。オブジェクトから返す文字列toString()関数は、ListViewアイテムにレンダリングされたTextViewに表示されます。

基本的に、Device.javaクラスでは、toStringメソッドをオーバーライドして、渡すオブジェクトメンバーを指定する必要があったため、このコードを含めました。

@Override
public String toString(){
    return this.name;
}
于 2012-08-20T14:50:40.143 に答える