如何从Android中的另一个类调用方法

时间:2016-05-25 07:59:19

标签: android

我有一个主要布局,包含谷歌地图和RecyclerView位置。从我的Recycler适配器我OnClickListener我需要在地图上调用缩放,其中属性来自主布局。

回收适配器:

 viewHolder.btnMap.setOnClickListener(new View.OnClickListener() 
 {
            @Override
            public void onClick(View v) 
            {
                zoomMap(lat, lng);
            }
 }); 

主要布局:

public void zoomMap(double lat, double lng)
{
        //String to display current latitude and longitude
        String msg = lat + ", "+lng;

        //Creating a LatLng Object to store Coordinates
        LatLng latLng = new LatLng(lat, lng);

        //Moving the camera
        mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        //Animating the camera
        mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

        //Displaying current coordinates in toast
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

4 个答案:

答案 0 :(得分:0)

要从另一个类调用方法,您必须创建该特定类的对象。

ClassName className = new ClassName();
viewHolder.btnMap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                className.zoomMap(lat, lng);

            }
        });

快乐的编码。

答案 1 :(得分:0)

在第二个活动中创建主类对象,然后通过object.methed调用下一个活动。

答案 2 :(得分:0)

我建议你使用observer pattern:创建一个像MapZoomer这样的界面,用mapview实现你的界面,并从listview中调用界面方法。在代码中它看起来像:

interface MapZoomer{
    public void zoomMap(double lat, double lng);
}
...
class MapActivity extends AppCompatActivity implements MapZoomer{
    ...
    public void zoomMap(double lat, double lng){...}
}
...
class RecycleViewContainer{
    MapZoomer zoomer;

    public RecycleViewContainer(MapZoomer zoomer){
        this.zoomer = zoomer;
        ...
        viewHolder.btnMap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
                zoomer.zoomMap(lat, lng);

            }
        }); 
    }
} 

答案 3 :(得分:0)

以下是几种方法: 1)您可以制作需要调用静态然后使用

进行简单调用的方法
public static void zoomMap(double lat, double lng)

然后

ClassWhereThisMethod.zoomMap(lat, lng);

2)您可以在适配器中创建接口,然后在活动中将其实现设置为“this”并实现此方法。然后你就可以从适配器调用它了。

3)在适配器中创建本地Runnable变量,然后在构造函数中设置它或将其设置为public并在适配器初始化时设置它,并使用带有zoomMap(lat,lng)的runonuithread传递runnable;在它。

相关问题