如何将数据从片段Activity传递到android中的非活动类

时间:2014-07-10 09:43:25

标签: android android-layout android-intent android-fragments

代码1是 my Fragment class 的一部分   从代码1 我得到我的地名 。我想将该地名传递给非活动类,即 代码2

代码1

@Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            gps = new GPSTracker(getActivity());

            Geocoder geocoder= new Geocoder(getActivity(), Locale.ENGLISH);

            myAddress=(TextView)getView().findViewById(R.id.gpsLocation);
            surveyView = (SurveyView) getView().findViewById(R.id.surveyView);
            newsHomeView = (NewsHomeView) getView().findViewById(R.id.newsHomeView);
            audioView = (AudioItemView) getView().findViewById(R.id.audioView);

            AudioListener listener = (AudioListener)getActivity();
            audioView.setListener(listener);

            newsHomeView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MainActivity mnAct = (MainActivity)HomeFragment.this.getActivity();
                    mnAct.moveToPage(Constants.NEWS_PAGE);
                }
            });

            iPrevIndex = -1;


            // check if GPS enabled     
            if(gps.canGetLocation()){

                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();

                // \n is for new line
                //Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();


                try {

                  //Place your latitude and longitude
                //  List<Address> addresses = geocoder.getFromLocation(37.423247,-122.085469, 1);
                List<Address> addresses = geocoder.getFromLocation(latitude,longitude, 1);
                  if(addresses != null) {

                      Address fetchedAddress = addresses.get(0);
                      StringBuilder strAddress = new StringBuilder();

                      for(int i=0; i<=fetchedAddress.getMaxAddressLineIndex(); i++) {
                            strAddress.append(fetchedAddress.getAddressLine(i)).append("\n");
                      }
                    Log.i("country name ",fetchedAddress.getAddressLine(fetchedAddress.getMaxAddressLineIndex()));

                    String s=fetchedAddress.getAddressLine(fetchedAddress.getMaxAddressLineIndex()-1);// Bangalore, Karnataka, 560038
                    String str[]=s.split(" ");// array of Bangalore, Karnataka, 560038
                    System.out.println(Arrays.toString(str)); // print all array element



                    //  myAddress.setText("You'r location is: " +strAddress.toString());

                  }

                  else
                      myAddress.setText("No location found..!");
                 // Toast.makeText(getActivity(),"Please switch on yor gps",Toast.LENGTH_LONG).show();

              } 
            catch (IOException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                     Toast.makeText(getActivity(),"Could not get address..!", Toast.LENGTH_LONG).show();
            }


            }else{
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            }

        }

代码2

    public class Audios extends BaseCollection<Audio> {


     private static String newValue;

     public static setNewValue(String value) {
            this.newValue = value;
            //Code to use this value.

        }
    @Override
    public void loadWithJson(JSONArray jsonObj) {



        if(null == jsonObj) {
            return;
        }
        try {

            List<Audio> entries = new ArrayList<Audio>();
            for (int o = 0; o < jsonObj.length(); ++o) {
                Audio opt = Audio.fromJson(jsonObj.getJSONObject(o));
             //  String title = opt.getTitle();
             //System.out.println(opt.getTitle().substring(0, 4)); // title.substring(0, 3);
        //          entries.add(opt);
                        entries.add(opt);   

            }
            this.entries = entries;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void getAudioResult(JSONObject jsonRes) {
        int id, grpId, dwnCount, upCount;
        if(null != jsonRes) {
            try {
                id      = jsonRes.getInt(Constants.MEDIA_ID);
                grpId   = jsonRes.getInt(Constants.GROUP_ID);
                dwnCount= jsonRes.getInt(Constants.SET_THUMBS_DWN);
                upCount = jsonRes.getInt(Constants.SET_THUMBS_UP);
            }
            catch(JSONException je) { id = grpId = dwnCount = upCount = -1;}
            if(-1 == id || -1 == grpId) {
                return;
            }
            for(int iLoop = 0; iLoop < entries.size(); iLoop++) {
                Audio opt   = entries.get(iLoop);
                if(opt.token == id && opt.groupId == grpId) {
                    opt.thumbDwns   = dwnCount;
                    opt.thumbUps    = upCount;
                    break;
                }
            }
        }
    }




}

在代码1中听到我得到我的地名

值:

place=str[1].substring(0, 4);
            AudiosFragment hm=new AudiosFragment();
            Bundle bundle = new Bundle();
            bundle.putString("place", str[1].substring(0, 4));

请告诉我如何通过地方值。

3 个答案:

答案 0 :(得分:1)

通过使用构造函数

将数据从一个类传递到另一个类的简单方法

考虑例子:

Class A{
Object o;
private methodA()        
{
B b = new B(o);       //here you are passing o to Class B
b.methodB();
}
} 

Class B{
Object o;
public B(Object O)
{
this.o=o;
}

public methodB()
{
use object o here
}
}

可能会有所帮助..

答案 1 :(得分:0)

您可以使用Singleton类,但可能只复制String []。

public class Singleton {
  private static Singleton uniqInstance;
  private String str[];
  private Singleton() {

  }

  public static synchronized Singleton getInstance() {
    if (uInstance == null) {
      uInstance = new Singleton();
    }
    return uInstance;
  }
} 

答案 2 :(得分:0)

只需在Audios Class中创建一个方法即可。

现在,根据您希望Audio Class的不同对象具有此String的不同值的事实,您可以将其定义为静态或不静态。然后只需调用该方法。

示例:

Class Audios extends BaseCollection<Audio> {
    private static String newValue;

    public static void setNewValue(String value) {
        this.newValue = value;
        //Code to use this value.
        ..
    }
}

从片段中,只需拨打Audios.setNewValue("This is the value for the String");

即可