Обновить содержимое действия при нажатии кнопки «Обновить»

1

Я создаю одно демо-приложение, имеющее контакты всех пользователей в Google mapView. Я получаю данные этих пользователей из одного php файла на сервере. php файл возвращает мне один JSONArray из JSONObjects, и каждый JSONObject имеет данные отдельного пользователя. я получаю его и определяю местоположение пользователей om map в качестве контактов карты. это выглядит ->

GoogleMapView-> Это !

public class GoogleMapActivity extends MapActivity implements ActionBar {

Button btnOnMapList, btnProfileHome, btnRefresh;
Intent intent;
GoogleMapActivity gMapActi;

private JSONArray jArray;
private JSONObject jFan_Data;
private ItemBean bean;
private FansData fansdata;//reference of FansData class that return me JSONArray 

HelloItemizedOverlay itemizedOverlay;//..........

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    btnProfileHome = (Button) findViewById(R.id.btn_profile_home);
    btnOnMapList = (Button) findViewById(R.id.btn_list_home);
    btnRefresh = (Button) findViewById(R.id.btn_refresh_home);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.googlemapactivity);
    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    mapView.displayZoomControls(true);
    // mapView.setSatellite(true);

    /**TG_1 -> Here i write code to get my current location(e.g., through LocationManager) 
     * after getting location, i write my location latitude & longitude into 
     * shearedPreference */

    //geading preference to get my unique id
    SharedPreferences myUid=GoogleMapActivity.this.getSharedPreferences("uid", MODE_WORLD_READABLE);
    String myId=myUid.getString("myId", "");
    Log.i("MyUid", myId);

    /**Calling "jFansData" method of "FansData" class, that return me JSONArray that 
     * have JSONObjects as its elements & each JSONObject is the complete data of one Unique 
     * Fan Near you. currently i use hard codded  lat & lang are
     */
    fansdata=new FansData();
    jArray=fansdata.jFanDataArray(1000, 12.9716060, 77.5903760, "h9ow0");
    System.out.println(jArray.toString());  

    //to showing fans on map as pins
    Drawable drawable = this.getResources().getDrawable(
            R.drawable.small_football_icon);
    HelloItemizedOverlay itemizedOverlay = new HelloItemizedOverlay(
            drawable, getParent());
    for(int i=0;i<jArray.length();i++){
        try {
            jFan_Data=jArray.getJSONObject(i);

            //.........Code Showing different ways of How we can convert one double type value into String type!    
            try {
                System.out.println("Normal"+jFan_Data.getDouble("lat"));
                Double lat=new Double(jFan_Data.getDouble("lat"));
                System.out.println("fm_Dbl_Wpr"+lat);
                System.out.println("wpr_toStr"+Double.toString(lat));
                System.out.println("wpr_toStr_jFan"+Double.toString(jFan_Data.getDouble("lat")));

                Log.i("GeoCd_double", Double.toString(lat));
            } catch (JSONException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            //.........
            GeoPoint geoPoint = new GeoPoint((int) (jFan_Data.getDouble("lat")* 1E6),
            (int) (jFan_Data.getDouble("lang")* 1E6));
        //  GeoPoint geoPoint = new GeoPoint(jFan_Data.getInt("lat"),jFan_Data.getInt("lang"));
            //GeoPoint geoPoint = new GeoPoint((int)(jFan_Data.getInt("lat")*1E6), (int)(jFan_Data.getInt("lang")*1E6));

            OverlayItem overlayitem = new OverlayItem(geoPoint, jFan_Data.getString("name"),
            jFan_Data.getString("uniqid"));
            itemizedOverlay.addOverlay(overlayitem);

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    List<Overlay> mapOverlays = mapView.getOverlays();


    // Second Overlay
    Drawable drawable2 = this.getResources().getDrawable(
            R.drawable.small_football_icon_yellow);

    HelloItemizedOverlay itemizedOverlay2 = new HelloItemizedOverlay(
            drawable2, getParent());

    GeoPoint geoPoint4 = new GeoPoint(35410000, 139460000);
    OverlayItem overlayItem4 = new OverlayItem(geoPoint4, "Nidhi", "");
    itemizedOverlay2.addOverlay(overlayItem4);

    GeoPoint geoPoint5 = new GeoPoint((int) (41.51738 * 1E6),
            (int) (-0.08186 * 1E6));
    OverlayItem overlayItem5 = new OverlayItem(geoPoint5, "Sapan", "");
    itemizedOverlay2.addOverlay(overlayItem5);

    mapOverlays.add(itemizedOverlay);
    mapOverlays.add(itemizedOverlay2);
}

 //.........................

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void onHomeList(View view) {
    Intent in = new Intent(getParent(), MapPinsList.class);
    TabGroupActivity prnt = (TabGroupActivity) getParent();
    prnt.startChildActivity("MapPinsList", in);

}

@Override
public void onHomeProfile(View view) {
    Intent in = new Intent(getParent(), ProfileActivity.class);
    TabGroupActivity prnt = (TabGroupActivity) getParent();
    prnt.startChildActivity("ProfileActivity", in);

}

@Override
public void onHomeRefresh(View view) {
    // TODO Auto-generated method stub

   //???????????

    //super.onCreate(null);
}

@Override
public void onListMap(View view) {
    // TODO Auto-generated method stub

}

@Override
public void onListProfile(View view) {
    // TODO Auto-generated method stub

}

}

он имеет один actionBar на этом представлении, имеющий три кнопки изображения (обновить, список и профиль) над ним. когда я нажимаю "Список", он покажет мне mapPins в одном "ListView". У меня есть один адаптер (LazyAdapter расширяет BaseAdapter).

listView-> это !

public class MapPinsList extends ListActivity implements OnItemClickListener,ActionBar {

ListView mFansListView;
JSONArray jArray;//jArray that contains jobjects of all fans. each jobj hv data of 1 unique fan!
JSONObject jFan_Data;//contain data of an indivisual fan
JSONObject jFansData;//contain data of an all fans
//ListViewCustomAdapter adapter;//gc
LazyAdapter adapter;
private ArrayList<Object> fansList;
private ArrayList<String> mStrings ;
private ItemBean bean;
private FansData fansData;
String url="http://192.168.200.111/ManU/";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.on_pins_list_clicks);

    prepareArrayLits();

    // mFansListView = (ListView) findViewById(R.id.listView1);
    mFansListView = (ListView) findViewById(android.R.id.list);
    adapter = new LazyAdapter(this, mStrings, fansList);
    mFansListView.setAdapter(adapter);// come null pointer exception when no fan data is returned! hendle it...

    mFansListView.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
    // TODO Auto-generated method stub
    ItemBean bean = (ItemBean) adapter.getItem(position);

    //retrieve MyUniqueId from sheared Preferences 
    SharedPreferences myUid=MapPinsList.this.getSharedPreferences("uid", MODE_WORLD_READABLE);
    String myId=myUid.getString("myId", "");

    Toast.makeText(this,"MyUId->"+ myId+"\nFanId => " + bean.getUid() +" \n UID => " + bean.getTitle(), Toast.LENGTH_SHORT).show(); 

    /**from here-> I am going to start one activity that show the complete profile of a 
     * particular Fan... According to the unique id received from clicking on ListItem!    
     */
    for(int i=0;i<jArray.length();i++){
        try {
            JSONObject jFan_Data=jArray.getJSONObject(i);
            String fanId=jFan_Data.getString("uniqid");

            if(fanId.equals(bean.getUid())){
                //New Intent that start new Activity that show Profile of a Fan


                Intent in= new Intent(getParent(), FanProfile.class);
                TabGroupActivity prnt = (TabGroupActivity) getParent();
                Bundle fBundle= new Bundle();
                //fBundle.putStringArray("jFanData", jFanData);
                fBundle.putString("fanId", fanId);
                in.putExtras(fBundle);
                prnt.startChildActivity("FanProfile", in);

                //startActivity(in);

            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

/** Method used to prepare the ArrayList, Same way, you can also do looping
 * and adding object into the ArrayList.
 */

/** Method used to prepare the ArrayList */
public void prepareArrayLits() {

    /** I read shearedPreference to get my location latitude, longitude &
     * myUniqueId */
    //......

    fansData = new FansData();

    //return me array containing data of all fans  
    jArray = fansData.jFanDataArray(1000, 12.9716060, 77.5903760, "h9ow0");

    /**preserving this jArray into preference so that i can recieve it any where 
     * when i want the data of all fans like in GooglwMapActivity when i tap on pins...
     * I store it in the String formate...But when i get it from preference i can 
     * build one JSONArray by passing this String as parameter as 
     * SharedPreferences fansData=GoogleMapActivity.this.getShearedPrefrences("jArray",MODE_WORLD_READABLE);
     * String jArr=JArray.getString("allFansData","");
     * -> new JSONArray(jArr); will return me complete jArray same as that of here in MapPinsList!!!  
     * */

    SharedPreferences fansData = getSharedPreferences("jArray", MODE_WORLD_READABLE);
    SharedPreferences.Editor edit = fansData.edit();
    edit.putString("allFansData", jArray.toString());
    edit.commit();

    // ++++++++
    try {
        //Initializing ArrayList
        fansList = new ArrayList<Object>();
        mStrings = new ArrayList<String>();
        for (int i = 0; i < jArray.length(); i++) {
            // will return the data of each row fetched from JSONArray returned by location1.php
            String data_of_each_user = jArray.get(i).toString();

            Log.i("Data Of User at index " + i + " is", data_of_each_user);

            // I put the object at index "i" into JSONObject & retrieve data from name-value pair
            jFan_Data = jArray.getJSONObject(i);// data of User at index i
                                                // in array

            AddObjectToList(jFan_Data.getString("uniqid").toString(), jFan_Data.getString("name"),
                    jFan_Data.getString("distance"));

            Log.i("URL", url+"images/"+jFan_Data.get("uniqid").toString()+".png");
            mStrings.add(url+"images/"+jFan_Data.get("uniqid").toString()+".png");
            Log.i("URL....", url+"images/"+jFan_Data.get("uniqid").toString()+".png");

            String nm = jFan_Data.get("name").toString();
            String uid = jFan_Data.get("uniqid").toString();
            String dis = jFan_Data.get("distance").toString();

            System.out.println("Your Name:       " + nm);
            System.out.println("Your Unique Id:  " + uid);
            System.out.println("Your Distance:   " + dis);
        }
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    // ++++++++++
}

// Add one item into the Array List
 public void AddObjectToList(String uid, String title, String desc) {
    bean = new ItemBean();
    bean.setUid(uid);
    bean.setDescription(desc);
    bean.setTitle(title);
    fansList.add(bean);
}

@Override
public void onHomeList(View view) {
    // TODO Auto-generated method stub
}

@Override
public void onHomeProfile(View view) {
    // TODO Auto-generated method stub
}

@Override
public void onHomeRefresh(View view) {
    // TODO Auto-generated method stub
}

@Override
public void onListMap(View view) {
    Intent in = new Intent(getParent(), GoogleMapActivity.class);
    TabGroupActivity prnt = (TabGroupActivity) getParent();
    prnt.startChildActivity("GoogleMapActivity", in);
}

@Override
public void onListProfile(View view) {
    // TODO Auto-generated method stub
    Intent in = new Intent(getParent(), ProfileActivity.class);
    TabGroupActivity prnt = (TabGroupActivity) getParent();
    prnt.startChildActivity("ProfileActivity", in);
}

}

Что мне нужно, когда я нажимаю кнопку "Обновить" в этих представлениях, содержание моей деятельности обновляется! ...?

содержимое JSONArray зависит от моего текущего местоположения, и когда я нажимаю кнопку обновления, он снова просматривает мои данные (например, мой текущий LATITUDE & LONGITUDE, расстояние до которого я хочу видеть пользователей из моего текущего местоположения), я пишу их в onCreate моего класса. Теперь Как обновить мое содержимое, когда я нажимаю кнопку "Обновить" на этих представлениях???

Любые предложения, пожалуйста, оценили бы любой указатель, образец кода, чтобы сделать это

Теги:
listview
baseadapter
refresh
android-mapview

1 ответ

1

вы должны перезапустить свою активность с помощью single_Top намерения single_Top как single_Top ниже, при нажатии кнопки.

Intent intent = new Intent(context,GoogleMapActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

startactivity(intent);


By this it not call your activity onCreate() or onResume() but it call onNewIntent().
so do your refresh code inside it as-

onNewIntent(){

   //   your stuff...

    ....
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню