关于Blackberry中的ListField

时间:2011-06-28 12:13:45

标签: blackberry

Plz给出代码或函数如何清除ListField并更新ListField。   假设我想在ListField中显示从JSON对象中提取的一些多文本(项目名称,项目管理器)。   我能够在ListField中显示这个字符串,但是我需要添加一个更多的功能..在ListField上面应该有一个ButtonField,当用户点击ButtonField时,ListField应该根据Project Name以排序的方式显示字符串。所以我需要清除ListField

NetworkingMainScreen的代码

package src1;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.system.*;

import org.json.me.JSONArray;
import org.json.me.JSONException;
import org.json.me.JSONObject;
import java.util.Vector;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.UiApplication;






class NetworkingMainScreen extends MainScreen
{


     private EditField urlField;
     private BitmapField imageOutputField;
     private RichTextField textOutputField;

     private ListField prjctlist_Field;
     private Vector prjct_list_v = new Vector();
     VerticalFieldManager vfm;

     private String prjts;
    public int total_prjcts;
    JSONArray data_json_array;
    JSONObject outer;
    ListField myList;
    private Vector v_prj_title;
    private Vector v_prj_mgr;
    private Vector send_vector;
    private Vector send_vector3;
    private Vector send_vector4;
    private String t1,t2;
    public JSONArray jsArrPrjts;
    ListCallBack callback;
    ButtonField sort;


    NetworkingMainScreen() 
    {


       // Screen2 s = new Screen2();
       // UiApplication.getUiApplication.pushScreen(s);


        setTitle("Networking");
        urlField = new EditField("URL:", "http://iphone.openmetrics.com/apps/mattson/api.html?action=login&user=Nathan&password=coffee00&server=exp.lcgpence.com;deviceside=true");
        textOutputField = new RichTextField();
        imageOutputField = new BitmapField();


        add(urlField);

        add(new SeparatorField());


        add(new LabelField("Text retrieved:"));
        add(textOutputField); 

        myList = new ListField();
        callback = new ListCallBack();
        myList.setRowHeight(80);
        myList.setCallback(callback);

        add(myList);






    }

    protected void makeMenu(Menu menu, int instance) 
    {
    super.makeMenu(menu, instance);
    menu.add(new MenuItem("Get", 10, 10) {
    public void run() {
    getURL();
    }
    });
    }

    private void getURL()
    {
        HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(),"GET", this);
        dispatcher.start();
    }


    public void requestSucceeded(byte[] result, String contentType) 
    {

          if (contentType.startsWith("text/")) {
           synchronized (UiApplication.getEventLock()) 
          {     
          String strResult = new String(result);
          try
          {
            JSONObject joPrjt = new JSONObject(strResult);
            String res_code = joPrjt.optString("responseCode");

            if( res_code.equals("1"))
            {


               data_json_array = new JSONArray();
               data_json_array = joPrjt.optJSONArray("data");

               int s = data_json_array.length();
               v_prj_title = new Vector();
               v_prj_mgr = new Vector();
               outer = new JSONObject();
               for(int i=0; i<s; i++)
               {
                 //outer = new JSONObject();
                 outer = data_json_array.getJSONObject(i);

                String job_no = outer.optString("job_number");
                String contract_date = outer.optString("contract_date");
                String project_title = outer.optString("project_title");
                String project_manager = outer.optString("project_manager");
                String created_date = outer.optString("created_date");
                String project_name = outer.optString("project_name");
                v_prj_title.addElement(project_title);
                v_prj_mgr.addElement(project_manager);
              }
               UiApplication.getUiApplication().pushScreen(new Screen2(v_prj_title,v_prj_mgr,0,v_prj_title,v_prj_mgr));


            }
            else
            {
                Dialog.alert("Web page connected but not the requested page");
            }

          }
          catch(JSONException e)
          {
             e.printStackTrace();
             System.out.println("key not found catched " + e);   
          }
        }


          }
          else 
          {
    synchronized (UiApplication.getEventLock()) {
    Dialog.alert("Unknown content type: " + contentType);
     }
     }

      }



      public void requestFailed(final String message) 
      {
          UiApplication.getUiApplication().invokeLater(new Runnable() {
     public void run() {
    Dialog.alert("Request failed. Reason: " + message);
    }  
    });

      }




     } 

Screen2的代码

   package src1;

   import net.rim.device.api.ui.container.MainScreen;

   import net.rim.device.api.ui.component.ButtonField;

   import net.rim.device.api.ui.component.LabelField;

   import org.json.me.JSONArray;

  import org.json.me.JSONException;

   import org.json.me.JSONObject;

  import java.util.Vector;

  import net.rim.device.api.ui.container.VerticalFieldManager;

import net.rim.device.api.ui.component.ButtonField;

import net.rim.device.api.ui.FieldChangeListener;

import net.rim.device.api.ui.component.ListField;

import net.rim.device.api.ui.Field;

import net.rim.device.api.ui.UiApplication;



class Screen2 extends MainScreen implements FieldChangeListener

{

    JSONArray j_array;

    JSONObject j_object;

    CustomButtonField bf1;


    Vector v_prj_title,v_prj_mgr,v_job_no,v_created_date,v_prj_name,send_vector;

    Vector main_v_prj_title,main_v_prj_mgr;

    String job_no,contract_date,project_title,project_manager,created_date,project_name;

    VerticalFieldManager vfm;

    ListField myList;

    ListCallBack callback;

    int pic_status;

    int b;

    String t1,t2;



    String temp1,temp2,f1,f2;

   // ListField prjctlist_Field;

    Screen2(Vector v_prj_title2,Vector v_prj_mgr2,int pic_status,Vector main_v_prj_title_o2,Vector main_v_prj_mgr_o2) 

    {    


            this.main_v_prj_title = main_v_prj_title_o2;
            this.main_v_prj_mgr = main_v_prj_mgr_o2;

        this.v_prj_title = v_prj_title2;
        this.v_prj_mgr = v_prj_mgr2;

        this.pic_status = pic_status;

        bf1 = new CustomButtonField("Name",pic_status,0); 
        bf1.setChangeListener(this);
        vfm = new VerticalFieldManager();
        vfm.add(bf1);
        int s = v_prj_title.size();
        myList = new ListField();
        callback = new ListCallBack();
        myList.setRowHeight(80);
        myList.setCallback(callback);
        for(int i=0;i<s;i++)
           {
               myList.insert(i);
               t1 = v_prj_title.elementAt(i).toString();
               send_vector = new Vector(2);
               send_vector.addElement(t1);
               t2 = v_prj_mgr.elementAt(i).toString();
               send_vector.addElement(t2);
               callback.insert(send_vector,i);
           }
        vfm.add(myList);
        add(vfm);
    }


    public void fieldChanged(Field field, int context) 
    {
        if(field == bf1)
        {

          if(pic_status == 0)
           {
               b =1;
               int s = v_prj_title.size();

               for(int i=0;i<s;i++)
               {
                   for(int t=i+1;t<s;t++)
                   {
                        temp1 = (String)v_prj_title.elementAt(i);


                        temp2 = (String)v_prj_title.elementAt(t);

                         if(temp1.compareTo(temp2)>0)
                         {
                             //System.out.println("Comparision Executed :"+temp1 + " is greater than " + temp2);
                             f1 = (String)v_prj_mgr.elementAt(i);
                             f2 = (String)v_prj_mgr.elementAt(t);
                             v_prj_title.setElementAt(temp1,t);
                             v_prj_title.setElementAt(temp2,i);

                              v_prj_mgr.setElementAt(f1,t);
                              v_prj_mgr.setElementAt(f2,i);


                          }
                    }

              }

               UiApplication.getUiApplication().pushScreen(new Screen2(main_v_prj_title,main_v_prj_mgr,b,main_v_prj_title,main_v_prj_mgr));
           }     

          if(pic_status == 1)
          {
          b=0;
          UiApplication.getUiApplication().pushScreen(new Screen2(main_v_prj_title,main_v_prj_mgr,b,main_v_prj_title,main_v_prj_mgr));

          }




        }


      }

     } 

我需要澄清的另一件事是,在上面的代码中我首先解析了NetworkingMainScreen中的JSON对象,如果JSON解析成功,我已经推送了一个新的屏幕名称Screen2将存储的Vector传递给Screen2。 Screen2执行ListField绘图,或者我应该仅在NetworkingMainScreen类中执行ListField绘图。

 For details about the items i need to display plz look **http://iphone.openmetrics.com/apps/mattson/api.html?action=login&user=Nathan&password=coffee00&server=exp.lcgpence.com&output=data**

1 个答案:

答案 0 :(得分:1)

在屏幕中实现ListFieldCallback,然后您可以在drawListRow中处理行的绘制。