Question

I have a 2 button in my application page below an Image in a screen that implements field change listener I have implemented the code for this buttons in the Listener yet the buttons still do not react as expected

here is the guilty class

package com.client.grid;

import net.rim.device.api.synchronization.UIDGenerator;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Border;
import net.rim.device.api.ui.decor.BorderFactory;

public class MyScreen2 extends MainScreen implements FieldChangeListener {
    // Image height of central image
    private int mImageHeight = 240;
    // Image width of central image.
    private int mImageWidth = 320;

    ButtonField __button1;
    ButtonField __button2;

    public MyScreen2(Bitmap _image) {
        final Bitmap backgroundBitmap = Bitmap
                .getBitmapResource("Artmover-background.jpg");

        HorizontalFieldManager horizontalFieldManager = new HorizontalFieldManager(
                HorizontalFieldManager.USE_ALL_WIDTH
                        | HorizontalFieldManager.USE_ALL_HEIGHT) {

            // Override the paint method to draw the background image.
            public void paint(Graphics graphics) {

                // Draw the background image and then call super.paint
                // to paint the rest of the screen.
                graphics.drawBitmap(0, 0, Display.getWidth(),
                        Display.getHeight(), backgroundBitmap, 0, 0);
                super.paint(graphics);
            }
        };

        HorizontalFieldManager horizontalFieldManagerImage = new HorizontalFieldManager();

        Bitmap __scaledBmp = new Bitmap(mImageWidth, mImageHeight);
        _image.scaleInto(0, 0, _image.getWidth(), _image.getHeight(),
                __scaledBmp, 0, 0, mImageWidth, mImageHeight,
                Bitmap.FILTER_BILINEAR);
        BitmapField __bmpField = new BitmapField(__scaledBmp);
        horizontalFieldManagerImage.add(__bmpField);

        HorizontalFieldManager horizontalFieldManagerButtons = new HorizontalFieldManager();
        __button1 = new ButtonField("Approve");
        // Set margin to the left to displace button screen's left margin.
        __button1.setMargin(0, 0, 0, 20);
        horizontalFieldManagerButtons.add(__button1);

        __button2 = new ButtonField("Not Approve");
        // Set margin to the left to displace button from above button
        __button2.setMargin(0, 0, 0, 20);
        horizontalFieldManagerButtons.add(__button2);

        // Set margin at the top, to displace the central image.
        horizontalFieldManagerImage.setMargin(70, 0, 0, 0);
        // Set top margin to displace buttons from above image
        horizontalFieldManagerButtons.setMargin(30, 0, 0, 0);

        VerticalFieldManager verticalFieldManagerImage = new VerticalFieldManager();
        verticalFieldManagerImage.add(horizontalFieldManagerImage);
        verticalFieldManagerImage.add(horizontalFieldManagerButtons);

        // Set margin at the top to displace contents abit down.
        verticalFieldManagerImage.setMargin(30, 0, 0, 0);

        horizontalFieldManager.add(verticalFieldManagerImage);
        add(horizontalFieldManager);
    }

    class CustomDialog extends PopupScreen implements FieldChangeListener {
        public RichTextField rd;
        ButtonField btnOK, btnCancel;
        String url;

        public CustomDialog() {
            super(new VerticalFieldManager());

            rd = new RichTextField();
            rd.setEditable(true);
            XYEdges thickPadding = new XYEdges(10, 10, 10, 10);
            Border roundedBorder = BorderFactory.createRoundedBorder(
                    thickPadding, Border.STYLE_SOLID);
            rd.setBorder(roundedBorder);

            btnOK = new ButtonField("OK");
            btnOK.setChangeListener(this);

            btnCancel = new ButtonField("Cancel");
            btnCancel.setChangeListener(this);

            add(rd);
            add(btnOK);
            add(btnCancel);
        }

        public void fieldChanged(Field field, int context) {
            if (field == btnOK) {
                System.out.println("ok button has been pressed" + rd.getText());
                UiApplication.getUiApplication().invokeLater(new Runnable() {

                    public void run() {


                        UiApplication.getUiApplication().invokeLater(
                                new Runnable() {
                                    public void run() {
                                        String url = "link/commentput.php?&c="
                                                + rd.getText()
                                                + "&id="
                                                + MyApp.user
                                                + "&u="
                                                + GridImageManager.url;
                                        final String me = NTServices
                                                .javaServerGet(url, 0);
                                        close();
                                        UiApplication.getUiApplication()
                                                .pushScreen(new MyScreen());



                                    }
                                });


                    }

                });

            } else if (field == btnCancel) {
                close();
            }
        }

        public void close() {
            close();
            super.close();
        }

    }

    public void fieldChanged(Field field, int context) {

        if (field == __button1) {
            UiApplication.getApplication().invokeLater(new Runnable() {

                public void run() {

                    String url = "http://link.php?&c=approved&id="
                            + MyApp.user + "&u=" + GridImageManager.url;
                    final String me = NTServices.javaServerGet(url, 0);
                    UiApplication.getUiApplication().pushScreen(new MyScreen());

                }
            });
        } else if (field == __button2) {

            UiApplication.getApplication().invokeLater(new Runnable() {

                public void run() {
                    UiApplication.getUiApplication().pushScreen(new CustomDialog());
                }
            });

        }
    }
}

could someone point out what am doing wrong thank you

Was it helpful?

Solution

Your code is correct, just initialize your button with this code-

__button1 = new ButtonField("Approve")
{
   protected boolean navigationClick(int status, int time) 
   {
      fieldChangeNotify(1);
      return true;
   }
};

__button2 = new ButtonField("Not Approve")
{
   protected boolean navigationClick(int status, int time) 
   {
      fieldChangeNotify(1);
      return true;
   }
};

OTHER TIPS

You missed calling setChangeListener for the buttons:

__button1.setChangeListener(this); and __button2.setChangeListener(this);

     __button1.setMargin(0, 0, 0, 20);
     __button1.setChangeListener(this);
    horizontalFieldManagerButtons.add(__button1);

and

    __button2.setMargin(0, 0, 0, 20);
    __button2.setChangeListener(this);
    horizontalFieldManagerButtons.add(__button2);

try this and let me know.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top