0

Прежде всего я прошу прощения за мой плохой английский: XДобавить кластера товары OnClick более расширяемым Просмотр списка

Иам довольно новичок в разработке Android App и Iam собирается развивать приложение, которое дает информацию пользователю как бесплатный парковые места в городе. Приложение основано на Картах Google.

Моя проблема: Мое приложение запускает и отображает макет Google Maps. Через ExpandableListView пользователь может открыть обзор о местах парковки. Если пользователь нажимает на дочерний элемент в ExpListView, новый элемент кластера должен быть сгенерирован в MapsLayout.

Как я могу предоставить данные OnClick в MainActivity? Я хочу, чтобы MainActivity «знал», на какой элемент щелкнул Пользователь! Im рад каждый ответ :)

public class MyExpandableAdapter extends BaseExpandableListAdapter{ 

private Activity activity; 
private ArrayList<Object> childtems; 
private LayoutInflater inflater; 
private ArrayList<String> parentItems, child; 

// constructor 
public MyExpandableAdapter(ArrayList<String> parents, ArrayList<Object> childern) 
{ 
    this.parentItems = parents; 
    this.childtems = childern; 
} 

public void setInflater(LayoutInflater inflater, Activity activity) 
{ 
    this.inflater = inflater; 
    this.activity = activity; 
} 

// method getChildView is called automatically for each child view. 
// Implement this method as per your requirement 
@Override 
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
{ 


    child = (ArrayList<String>) childtems.get(groupPosition); 

    TextView textView = null; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.child_view, null); 
    } 

    // get the textView reference and set the value 
    textView = (TextView) convertView.findViewById(R.id.textViewChild); 
    textView.setText(child.get(childPosition)); 

    // set the ClickListener to handle the click event on child item 
    convertView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      Toast.makeText(activity, child.get(childPosition), 
        Toast.LENGTH_SHORT).show(); 
      //Tried to insert connection to MapsActivity but doesnt work! 
     } 
    }); 
    return convertView; 
} 

// method getGroupView is called automatically for each parent item 
// Implement this method as per your requirement 
@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{ 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.parent_view, null); 
    } 

    ((CheckedTextView) convertView).setText(parentItems.get(groupPosition)); 
    ((CheckedTextView) convertView).setChecked(isExpanded); 

    return convertView; 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) 
{ 
    return null; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) 
{ 
    return 0; 
} 

@Override 
public int getChildrenCount(int groupPosition) 
{ 
    return ((ArrayList<String>) childtems.get(groupPosition)).size(); 
} 

@Override 
public Object getGroup(int groupPosition) 
{ 
    return null; 
} 

@Override 
public int getGroupCount() 
{ 
    return parentItems.size(); 
} 

@Override 
public void onGroupCollapsed(int groupPosition) 
{ 
    super.onGroupCollapsed(groupPosition); 
} 

@Override 
public void onGroupExpanded(int groupPosition) 
{ 
    super.onGroupExpanded(groupPosition); 
} 

@Override 
public long getGroupId(int groupPosition) 
{ 
    return 0; 
} 

@Override 
public boolean hasStableIds() 
{ 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) 
{ 
    return false; 
} 
} 

MapsActivity (Main)

public class MapsActivity extends FragmentActivity { 


private GoogleMap mMap; // Might be null if Google Play services APK is not available. 
private ClusterManager<MyItem> mClustermanager ; 
private ArrayList<String> parentItems = new ArrayList<String>(); 
private ArrayList<Object> childItems = new ArrayList<Object>(); 

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


    // Create Expandable List and set it's properties 
    ExpandableListView expandableList = (ExpandableListView) findViewById(R.id.expandableListView); 
    expandableList.setDividerHeight(2); 
    expandableList.setGroupIndicator(null); 
    expandableList.setClickable(true); 

    // Set the Items of Parent 
    setGroupParents(); 
    // Set The Child Data 
    setChildData(); 


    // Create the Adapter 
    MyExpandableAdapter adapter = new MyExpandableAdapter(parentItems, childItems); 


    adapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE), this); 

    // Set the Adapter to expandableList 
    expandableList.setAdapter(adapter); 
    // expandableList.setOnChildClickListener(); 


} 
// method to add parent Items 
public void setGroupParents() 
{ 
    parentItems.add("Parkhäuser"); 
} 
public void setChildData() 
{ 

    ArrayList<String> child = new ArrayList<String>(); 

    child = new ArrayList<String>(); 
    child.add("Park1"); 
    child.add("Park2"); 
    child.add("Park3"); 
    child.add("Park4"); 

    childItems.add(child); 

} 
private void setUpClusterer() 
{ 
    ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      .getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(47.99481, 7.84856), 10)) ; 

    //Initialisierung des Managers mit dem Context (this) und der Map 
    //Activity erbt von Context deswegen können wir dem Konstruktor 'this' mitgeben 

    mClustermanager = new ClusterManager<MyItem>(this, ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      .getMap()); 

    //Zeigt der Map die Listener des ClusterManagers 
    ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      .getMap().setOnCameraChangeListener((mClustermanager)); 
    ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      .getMap().setOnMarkerClickListener(mClustermanager); 
    //Hinzufügen der Markierungen zum Cluster Manager 
    addItems() ; 
} 

private void addItems(){ 
    //Startkoordinaten des ersten Markers --> Bahnhofsgarage 
    double lat = 47.99673 ; 
    double lng = 7.84152 ; 

    //Hinzufügen von 10 weiteren Punkten 

    for(int i = 1; i <14; i++){ 
     if(i==1) 
     { //Konzerthaus 
      lat = 47.99602 ; 
      lng = 7.84220; 
     } 
     if(i==2){ 
      //Volksbank 
      lat = 47.99783 ; 
      lng = 7.84322; 
     } 
     if(i==3){ 
      //am Bahnhof 
      lat = 47.99892 ; 
      lng = 7.84310; 
     } 
     if(i==4){ 
      //Uni-FMF/Vf 
      lat = 48.00135 ; 
      lng = 7.84481; 
     } 
     if(i==5){ 
      //unterlinden 
      lat = 47.99811 ; 
      lng = 7.84876; 
     } 
     if(i==6){ 
      //schwarzwaldcity 
      lat = 47.99760 ; 
      lng = 7.85090; 
     } 
     if(i==7){ 
      //Rotteckring 
      lat = 47.99618 ; 
      lng = 7.84732; 
     } 
     if(i==8){ 
      //Am Zähringer Tor 
      lat = 47.99921 ; 
      lng = 7.85350; 
     }if(i==9){ 
      //Karlsbau 
      lat = 47.99757 ; 
      lng = 7.85366; 
     }if(i==10){ 
      //Landratsamt 
      lat = 47.99969 ; 
      lng = 7.85758; 
     }if(i==11){ 
      //Schlossberg 
      lat = 47.99654 ; 
      lng = 7.85758; 
     }if(i==12){ 
      //Schwabentor 
      lat = 47.99054 ; 
      lng = 7.85833; 
     }if(i==13){ 
      //Am Martinstor 
      lat = 47.99281 ; 
      lng = 7.84715; 
     }if(i==14){ 
      //Uni Kolleg Gebäude 
      lat = 47.98797 ; 
      lng = 7.87129; 
     } 

     MyItem offsetItem = new MyItem(lat,lng) ; 
     mClustermanager.addItem(offsetItem); 

    } 
} 
} 

ответ

0

решенный! После исследования я делаю ExpandableAdpater внутренним классом MapsActivity! Теперь я могу поместить данные между обоими классами и использовать методы также!

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