0

ActivityクラスのメソッドからそのActivityのFragmentに値を取得する方法を理解しようとしています。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&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;
        }
}

EventsList.javaは、クラスがgetOtakuEvents()値を使用できることを知るのに役立つインターフェースです。

package com.leobee;

public interface EventsList {

    String getOtakuEvents();

}

最後に、フラグメントには、getStringfromActivity()と呼ばれるgetOtakuEvents()から値を取得するメソッドがあります。

 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()への静的参照を作成できません。getOtakuEvents()またはフラグメントで静的型を宣言しなかったため、これは混乱を招きます。

または、フラグメントでこのバージョンのメソッドも試しました。

  public String getStringfromActivity() {

        return getActivity().getOtakuEvents();

        }

エラーが発生します:メソッドgetOtakuEvents()がタイプActivityに対して未定義です。メソッドが親アクティビティで定義されているため、これは私を困惑させます。

具体的には、アクティビティからフラグメントに文字列値を送信できる必要があります。インターフェイスまたはgetActivityメソッドを使用してそれを実行しようとしています。私のコードを調べて、どこが間違っているのか、そしてそれを修正する方法を教えてもらえますか?私は2日間の大部分でこれに参加していて、それを理解できないようです。どんな助けでも大歓迎です。

4

1 に答える 1

0

SharedPreferencesから保存および取得できる可能性があります

于 2012-04-05T22:44:23.137 に答える