私は、アクティビティクラスのメソッドからそのアクティビティのフラグメントに値を取得する方法を理解しようとしています。 AsyncTaskActivity.java、EventsList.java、およびListFragment.javaの3つのファイルを設定しました。 AsyncTaskActivity.javaには、文字列値を返すgetOtakuEvents()メソッドがあります。アクティビティからフラグメントへの文字列値の返却
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+"&userLong="+userLong+"&randNum="+numRand });
}
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@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¶m2=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;
}
}
EventsList.javaは、クラスがgetOtakuEvents()値を利用できることを知るのに役立つインターフェイスです。
package com.leobee;
public interface EventsList {
String getOtakuEvents();
}
最後には、断片はgetOtakuEventsから値を取得するメソッドを有する()()getStringfromActivityと呼ばれます。
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<String> adapter = new ArrayAdapter<String>(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 && 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
}
}
私はエラーを取得:タイプEventsListから非静的メソッドgetOtakuEvents()をstatic参照できません。 getOtakuEvents()またはそのフラグメントで静的型を宣言しなかったため、これは混乱します。
代わりに、私はまた、断片方法のこのバージョンの試み:
public String getStringfromActivity() {
return getActivity().getOtakuEvents();
}
を私がエラーを取得しています:メソッドgetOtakuEventsは()型活性のために定義されていません。これは親の活動でというメソッドがと定義されているため、私にとって困惑しています。
具体的には、アクティビティの文字列値をフラグメントに送信できる必要があります。私はインターフェイスまたはgetActivityメソッドを使用してそれをしようとしています。あなたは私のコードを見て、どこが間違っているのか、それを修正する方法を教えてくれますか?私はこの2日間の大半を過ごしてきたので、それを理解できないようです。どんな助けもありがとうございます。
感謝からそれを取り出すことができます!私はこの方向を考えていませんでしたが、うまくいきました。 – Leoa