Note that there are some explanatory texts on larger screens.

plurals
  1. POReturn String value from Activity to a Fragment
    primarykey
    data
    text
    <p>I'm trying to figure out how to get the value from a method in the Activity class into the Fragment of that Activity. I have set up three files: AsyncTaskActivity.java, EventsList.java, and ListFragment.java. AsyncTaskActivity.java has the method getOtakuEvents() that returns a string value.</p> <pre><code>package com.leobee; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.google.android.maps.MapActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class AsyncTasksActivity extends MapActivity implements EventsList{ LocationManager locationManager; String stxtLat ; String stxtLong; double pLong; double pLat; String x; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Acquire a reference to the system Location Manager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { pLong=location.getLongitude(); pLat=location.getLatitude(); stxtLat=Double.toString(pLat); stxtLong=Double.toString(pLong); Toast.makeText(AsyncTasksActivity.this, stxtLong, Toast.LENGTH_SHORT).show(); Toast.makeText(AsyncTasksActivity.this, stxtLat, Toast.LENGTH_SHORT).show(); } public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {} }; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); DownloadWebPageTask task = new DownloadWebPageTask(); double numRand = Math.floor(Math.random()*1000); String userLat= stxtLat; String userLong= stxtLong; task.execute(new String[] { "http://www.leobee.com/otakufinder/scripts/geoloco.php?userLat="+userLat+"&amp;userLong="+userLong+"&amp;randNum="+numRand }); } private class DownloadWebPageTask extends AsyncTask&lt;String, Void, String&gt; { @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); //HttpGet myGet = new HttpGet("http://foo.com/someservlet?param1=foo&amp;param2=bar"); HttpGet httpGet = new HttpGet(url); try { HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader( new InputStreamReader(content)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } } catch (Exception e) { e.printStackTrace(); } } return response; } @Override protected void onPostExecute(String result) { x =result; Log.v("values",x); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } @Override public String getOtakuEvents() { // TODO Auto-generated method stub return x; } } </code></pre> <p>EventsList.java is an interface that helps the classes to know getOtakuEvents() value is available to them. </p> <pre><code>package com.leobee; public interface EventsList { String getOtakuEvents(); } </code></pre> <p>Lastly, the fragment has a method that gets the value from the getOtakuEvents() called getStringfromActivity().</p> <pre><code> package com.leobee; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; // shows list view of items if fragment is not null this class will also show the item selected form Detailfragment class public class ListFragment extends android.app.ListFragment{ String events; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String events =getStringfromActivity(); } public String getStringfromActivity() { String i; i=EventsList.getOtakuEvents(); return i; } /* public String getStringfromActivity() { return getActivity().getOtakuEvents(); }*/ @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(getActivity(), android.R.layout.simple_list_item_1,values); setListAdapter(adapter); } @Override public void onListItemClick(ListView l, View v, int position, long id){ String item =(String)getListAdapter().getItem(position); DetailFragment fragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment); if (fragment != null &amp;&amp; fragment.isInLayout()){ fragment.setText(item); }else{Intent intent = new Intent(getActivity().getApplicationContext(), DetailActivity.class); intent.putExtra("value", item); startActivity(intent); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e("text","config change detail fragment"); // Checks the orientation of the screen } } </code></pre> <p>I get error: Cannot make a static reference to the non-static method getOtakuEvents() from the type EventsList. This is confusing because I did not declare static type in getOtakuEvents() or in the fragment. </p> <p>Alternatively, I also tried this version of the method in the fragment :</p> <pre><code> public String getStringfromActivity() { return getActivity().getOtakuEvents(); } </code></pre> <p>I am getting an error :The method getOtakuEvents() is undefined for the type Activity. This is baffling to me because the method <em>is</em> defined in the parent activity. </p> <p>Specifically, I need to be able to send the string value from the activity to the fragment. I am trying to do it using an interface or the getActivity method. Can you look over my code and let me know where I'm going wrong and how to fix it? I've been at this for the majority of 2 days and can't seem to figure it out. Any help is appreciated. </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload