2011-06-28 31 views
0

Plz给出代码或函数如何清除ListField并更新ListField。 假设我想在一个ListField中显示一些从JSON对象中提取的多个文本(Project Name,Project Manager)。 我能够在ListField中显示这个字符串,但是我需要添加一个额外的功能即ie ..在ListField上方应该有一个ButtonField,并且当用户单击ButtonField时,ListField应该以基于项目的已排序方式显示字符串名称。所以我需要清除ListField关于Blackberry中的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); 
    } 
    }); 

     } 




    } 

代码屏蔽2是

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

      } 




     } 


     } 

    } 

一件事我需要clearify的是,在我上面的代码首先我已经解析了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** 
+0

我会回答这个问题,如果你提供了一个运行的例子,而不仅仅是2个屏幕... 顺便说一句,你列出的URL的数据似乎是在Perl数据::自卸车格式,这是不是JSON。 –

回答

1

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

相关问题