点击infoWindowAdapter后如何开始新活动?

时间:2014-10-21 13:56:03

标签: android android-activity

大家好,我是Android的初学者,但我想做的是在我的地图中推送infoWindowAdapter时开始一项新活动。代码似乎很简单,但它不起作用,我不知道为什么。你能帮助我吗?我在清单中声明了我的新活动(MoreInfoActivity),我想从主活动中调用它。您可以在下面找到我所有的" MoreInfoActivity" source,来自MainActivity的调用以及清单中的声明。非常感谢你

当我推送InfoWindowAdapter时从MainActivity调用: [更新]

final Activity thiz = this;
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
/*Nuova chiamata di un activity (scelta perché più pratica e la richiamiamo anche dalla listview)*/
/*************************************************************************************************/

    String nome_luogo = marker.getTitle();
    Intent piu_info = new Intent(thiz, MoreInfoActivity.class); 
    piu_info.putExtra("nome", nome_luogo);
    startActivity(piu_info);

/*************************************************************************************************/

    }
});

MoreInfoActivity: [已更新]

    public class MoreInfoActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_moreinfo);

        Bundle extras = getIntent().getExtras();
        if (extras != null){
            String value = extras.getString("nome");
            prendi_informazioni(value);
        }
    }

    public void prendi_informazioni(String nome_luogo){
        View layout = getWindow().getDecorView().findViewById(R.id.immagine_luogo);
        //String nome_luogo = marker.getTitle();

        BuildInfoMatrix printinfo = new BuildInfoMatrix();
        printinfo.Fill_Matrix();
        printinfo.Read_Matrix(nome_luogo, layout);
    }
}

清单:

<!-- More informations Activity -->
<activity
    android:name="com.example.findmyclients.MoreInfoActivity"
    android:screenOrientation="portrait">
</activity>

Logcat: http://pastebin.com/pKuW4LCk

2 个答案:

答案 0 :(得分:2)

我不完全确定您的语法是否正确。我正在质疑的部分是MainActivity.this。我不完全确定这意味着什么,但它可能是班级的一个实例。而是在clickListener之外创建一个Activity变量,并从clickListener创建引用。例如:

final Activity thiz = this; /* Needs to be final so you can reference it in inner class */

map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
    View v2 = getLayoutInflater().inflate(R.layout.activity_moreinfo, null);
    MoreInfoActivity prova = new MoreInfoActivity();
    prova.prendi_informazioni(marker);

    Intent piu_info = new Intent(thiz, MoreInfoActivity.class);    
    startActivity(piu_info);
}

});

作为旁注,您永远不应该自己实例化活动的实例。如果需要将额外参数传递给活动,请通过添加额外内容将其附加到intent。看这里: http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String,双[])

例如:

  String nome_luogo = marker.getTitle();
  piu_info.putExtra("marker", nome_luogo );

和更多信息的onCreate:

    String marker = getIntent().getExtras().getString("marker");
    doSomething(marker);

你现在这样做的方式,即使你没有得到空指针异常,你的参数也不会被MoreInfoActivity看到

答案 1 :(得分:0)

问题在于

public void prendi_informazioni(Marker marker){
    View layout;
    layout = findViewById(R.id.immagine_luogo);
    String nome_luogo = marker.getTitle();

    BuildInfoMatrix printinfo = new BuildInfoMatrix();
    printinfo.Fill_Matrix();
    printinfo.Read_Matrix(nome_luogo, layout);
}

是否在R.layout.activity_moreinfo中定义了immagine_luogo?