2016-01-14 1 views
0

Привет, я пытаюсь создать всплывающее окно с 4 кнопками, которые изменяют тип карты в действии Карт Google. Я установил прослушиватель кликов в классе с объектом GoogleMap, но я получаю эту ошибку при нажатии одной из кнопок.Android Studio: макет окна всплывающих окон с кнопками onClick

Process: com.student.nick.earthquakereport, PID: 7770 
      java.lang.IllegalStateException: Could not find method setMapNormal(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.Button with id 'mapNormal' 
        at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4485) 
        at android.view.View$DeclaredOnClickListener.onClick(View.java:4449) 
        at android.view.View.performClick(View.java:5204) 
        at android.view.View$PerformClick.run(View.java:21156) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5466) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Диалог запускается в том же классе методы OnClick находятся в

layFlator = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
    ViewGroup containter = (ViewGroup) layFlator.inflate(R.layout.map_settings, null); 

    mapSettings = new PopupWindow(containter, 750, 680, true); 
    mapSettings.setAnimationStyle(R.style.PopupAnimation); 
    mapSettings.showAtLocation(layout, Gravity.CENTER, 0,0); 

    containter.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      mapSettings.dismiss(); 
      return false; 
     } 
    }); 

Методы

public void setMapNormal(View view) { 
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    mapSettings.dismiss(); 
} 

public void setMapHybrid(View view) { 
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    mapSettings.dismiss(); 
} 

public void setMapTerrain(View view) { 
    mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
    mapSettings.dismiss(); 
} 

public void setMapSat(View view) { 
    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    mapSettings.dismiss(); 
} 

Спасибо за взглянуть

EDIT:. Компоновка всплывающее окно открывается

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fadingEdge="horizontal|vertical" 
android:fadingEdgeLength="4dp" 
android:elevation="20dp" 
android:background="@drawable/popwindow_border" 
> 


<Button 
    android:layout_width="180dp" 
    android:layout_height="wrap_content" 
    android:text="Normal" 
    android:id="@+id/mapNormal" 
    android:layout_gravity="center_horizontal" 
    android:onClick="setMapNormal"/> 

<Button 
    android:layout_width="180dp" 
    android:layout_height="wrap_content" 
    android:text="Hybrid" 
    android:id="@+id/mapHybrid" 
    android:layout_gravity="center_horizontal" 
    android:onClick="setMapHybrid"/> 

<Button 
    android:layout_width="180dp" 
    android:layout_height="wrap_content" 
    android:text="Terrain" 
    android:id="@+id/mapTerrain" 
    android:layout_gravity="center_horizontal" 
    android:onClick="setMapTerrain"/> 

<Button 
    android:layout_width="180dp" 
    android:layout_height="wrap_content" 
    android:text="Satellite" 
    android:id="@+id/button2" 
    android:layout_gravity="center_horizontal" 
    android:onClick="setMapSat"/> 
</LinearLayout> 

.

ответ

0

Поэтому я осмотрел и нашел учебное пособие, это правильный способ сделать это.

layFlator = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 

    View popUp = layFlator.inflate(R.layout.map_settings, null); 

    popupWindow = new PopupWindow(popUp, 750, 680, true); 
    popupWindow.setAnimationStyle(R.style.PopupAnimation); 

    Button btnHybrid = (Button) popUp.findViewById(R.id.mapHybrid); 
    btnHybrid.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
      Log.d("hybrid", "called"); 
      popupWindow.dismiss(); 
     } 
    }); 
+0

Вместо того, чтобы помещать SOLVED в заголовок, вы можете принять свой собственный ответ. –

0

Ваша ошибка сбщ ясно говорит:

java.lang.IllegalStateException: Не удалось найти метод setMapNormal (View) в родительском или предком контексте для андроида: OnClick атрибут, определенный на вид класса android.widget .Кнопка с ID «mapNormal»

Таким образом, вы не обращающегося метода прямо в onClickListener. Вы не можете просто вызвать метод, используя

this.methodName() 

внутри обработчика. Вы можете использовать что-то вроде

ClassName.this.methodName() 

или

getActivity().methodName() 
+0

Мой на клик слушателю установлен в XML, так что я не могу сделать это таким образом, я предполагаю, что <Кнопка андроид: layout_width = «180dp» андроид: layout_height = «wrap_content» андроида: текст =» Normal " android: id =" @ + id/mapNormal " android: layout_gravity =" center_horizontal " android: onClick =" setMapNormal "/> – ThatFellaNick

+0

Всплывающее окно - это Activity.xml, могу ли я присоединить к нему класс и просто пройти дополнительные услуги? – ThatFellaNick

+0

Я не уверен, что вы можете добавить onClickListener таким образом. По крайней мере, я никогда не делал этого. Попробуйте удалить его оттуда и поместить в свой код Java, проверить или работать. – AndroidMechanic

0

Вы не установлен onClickListener правильно. Взгляните на android:onClick.

Например, если вы укажете android: onClick = "sayHello", вы должны объявить публичный void sayHello (View v) метод вашего контекста (как правило, ваша активность).

+0

Я сделал это, его в классе java активности появилось всплывающее окно – ThatFellaNick

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

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