2017-01-25 1 views
0

У меня есть listview в MainActivity, у которого есть метод OnItemClickListener, который вызывает MapActivity. Активность карты получает широту и долготу от CustomAdapter (JSON). Цель состоит в том, чтобы щелкнуть по одному из элементов в списке, открыв MapActivity и получить широту и долготу из CustomAdapter. Моя проблема в том, что MapActivity запускается напрямую, не нажимая на элементы.Отправка Latlng из CustomAdapter в MapActivity с использованием намерения

public class MainActivity extends Activity{ 
private static final String TAG = MainActivity.class.getSimpleName(); 

// resturants json url 
private static final String url = "http://w99ltestapp.w99l.net/w99ltestapp/webservice/?link=getRest"; 
private ProgressDialog pDialog; 
private List<Resturant> resturantList = new ArrayList<Resturant>(); 
private ListView listView; 
private CustomListAdapter adapter; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView) findViewById(R.id.list); 
    adapter = new CustomListAdapter(this, resturantList); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent = new Intent(view.getContext(), MapsActivity.class); 
      startActivity(intent); 
     }}); 

CustomAdapter

public class CustomListAdapter extends BaseAdapter { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<Resturant> resturantItems; 


    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    public CustomListAdapter(Activity activity, List<Resturant> resturantItems) { 
     this.activity = activity; 
     this.resturantItems = resturantItems; } 

@Override 
public int getCount() { 
    return resturantItems.size(); 
} 

@Override 
public Object getItem(int location) { 
    return resturantItems.get(location); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (inflater == null) 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.list_row, null); 

    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 
    NetworkImageView thumbNail = (NetworkImageView) convertView 
      .findViewById(R.id.image); 
    TextView name = (TextView) convertView.findViewById(R.id.name); 
    TextView lat = (TextView) convertView.findViewById(R.id.lat); 
    TextView lng = (TextView) convertView.findViewById(R.id.lng); 


    // getting resturant data for the row 
    Resturant m = resturantItems.get(position); 

    // thumbnail image 
    thumbNail.setImageUrl(m.getImage(), imageLoader); 

    // name 
    name.setText(m.getName()); 

    // SETTING UP AND SENDING DATA 
    lat.setText("Lat: " + String.valueOf(m.getLat())); 

    lng.setText("Lng: " + String.valueOf(m.getLng())); 

    double latitude = Double.parseDouble(String.valueOf(m.getLat())); 
    double longitude = Double.parseDouble(String.valueOf(m.getLng())); 

    LatLng fromPosition = new LatLng(latitude, longitude); 
    //LatLng toPosition = new LatLng(11.145315551, 99.333455333); 


    Intent intent= new Intent(convertView.getContext(), MapsActivity.class); 

    Bundle args = new Bundle(); 
    args.putParcelable("from_position", fromPosition); 
    //args.putParcelable("to_position", toPosition); 

    intent.putExtra("bundle", args); 

    convertView.getContext().sendBroadcast(intent); 

MapsActivity

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 
private LatLng fromPosition= new LatLng(-34,151) ; 
// private LatLng toPosition ; 
private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
    Bundle bundle = getIntent().getParcelableExtra("bundle"); 
    fromPosition = bundle.getParcelable("from_position"); 
    toPosition = bundle.getParcelable("to_position"); 
} 


/** 
* Manipulates the map once available. 
* This callback is triggered when the map is ready to be used. 
* This is where we can add markers or lines, add listeners or move the camera. In this case, 
* we just add a marker near Sydney, Australia. 
* If Google Play services is not installed on the device, the user will be prompted to install 
* it inside the SupportMapFragment. This method will only be triggered once the user has 
* installed Google Play services and returned to the app. 
*/ 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    LatLng sydney =fromPosition; 
    mMap.addMarker(new MarkerOptions().position(sydney).title("resturant")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
} 

}

ответ

1

Почему заморачиваться с передачей данных в намерения, Вы можете использовать статические переменные для доступа к любой точке приложения. Вы также можете настроить свое намерение в соответствии с вашими требованиями.

Просто используйте fromPosition, как показано ниже,

общественный статический LatLng fromPosition;

2

передать данные таким образом от CustomListAdapter

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
someView.setOnClikListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final int position = mListView.getPositionForView((View) v.getParent()); 
       Intent intent = new Intent(view.getContext(), MapsActivity.class); 
       Bundle bundle = new Bundle(); 
       //Add your data from getFactualResults method to bundle 
       bundle.putString("from_position", your start point); 
       bundle.putString("to_position", your end point); 
       //Add the bundle to the intent 
       intent.putExtras(bundle); 
       startActivity(intent);)); 
      } 
     }); 
}  

получить данные в MapsActivity таким образом

Bundle bundle = getIntent().getExtras(); 

//Extract the data… 
fromPosition = bundle.getString("from_position"); 
toPosition = bundle.getString("to_position"); 
+0

Я хочу сначала передать данные в MainActivity из CustomAdapter. Затем передайте их MapActivity из MainActivity – Jason

+0

напишите setOnClikListener в методе getView() на любом представлении. Как @Override public View getView (int position, View convertView, родительская группа ViewGroup) { someView.setOnClikListener (новый MyOnClickListener (context, itemName)); } – Gautam

 Смежные вопросы

  • Нет связанных вопросов^_^