【问题标题】:How can i change the textview of a layout in different activity on click of customInfoWindow in main activity如何在主活动中单击 customInfoWindow 时更改不同活动中布局的文本视图
【发布时间】:2020-06-17 21:46:43
【问题描述】:

所以,我现在的代码是什么,我有一个点击自定义信息。 我有使用此代码的特定位置的特定自定义窗口:

主要 Java 活动:

@Override
    public void onInfoWindowClick(Marker marker) {

        if("India".equals(marker.getTitle())) {
            Intent intent = new Intent(this,India.class);
            startActivity(intent);
        }
        if("Australia".equals(marker.getTitle())){
            Intent intent = new Intent(this,Australia.class);
            startActivity(intent);
        }
    }

这是我目前拥有的。

两种布局之间的唯一区别是文本。

是否有一些我可以编写的代码,当单击悉尼标记的 customInfowWindow 时,布局的文本会更改为我想要的悉尼,当有人单击印度的 custominfowindow 时,该布局中的文本会更改为我想要的想要印度。

例如,当有人点击任何 2 个国家的 infowidow 时,我希望他们不是通过更改布局而是通过 changetext 命令来获取各自的信息。

另外,这不是我的完整代码,我只给出了可以更改或有用的代码。

请直接回答。

【问题讨论】:

  • 我不懂你。您是否为每个国家/地区的活动设置了不同的课程,但所有这些活动的布局都相同?如果是您的设计,您可以在Intent 中发送一些内容,例如在所选国家/地区的功能中显示的文本,并在每个活动的onCreate 中进行处理。
  • 是的,我有不同的课程,我不想。你能解释一下怎么做吗?我是新手。

标签: java android arrays listview textview


【解决方案1】:

只需使用putExtra 将选定的标题传递给下一个活动,并使用意图使用getExtra 获取下一个活动的标题,并根据选定的标题更改文本视图。

发送使用 -

Intent intent = new Intent(this,India.class);
intent.putExtra("title",marker.getTitle())
startActivity(intent);

接收使用 -

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout_name);
    //Find id of your text views
    ...
    ....
    String title  = getIntent().getStringExtra("title");
    textView1.setText(title);

}

希望这会对你有所帮助。

【讨论】:

  • 我可以知道我假设在 India.class 和 Australia.class 中定义的那些 textview 1 和 textview 2 在哪里吗?
  • @AtmosphericProductions 您只需在每个国家/地区活动的onCreate 中编写“接收使用”代码,即可在title 变量中获取IntentonInfoWindowClick 中设置的文本.然后需要获取TextView的引用(带findViewByID),并设置title文字:yourTextView.setText( title);
  • 您可以根据需要将使用getStringExtra 获得的标题设置为那些textview 1 和textview 2。尝试上活动的 onCreate 方法。
  • @AtmosphericProductions 我已经更新了我的答案,请检查。
【解决方案2】:

您应该首先创建一个通用活动来显示任何国家/地区的信息。 例如,将其命名为 InfoDisplayer。然后你应该像下面这样编辑你的方法。

@Override
public void onInfoWindowClick(Marker marker) {

    Intent intent = new Intent(getApplicationContext(), InfoDisplayer.class);
    Bundle bundle = new Bundle();
    switch (marker.getTitle()){
        case "India":
            bundle.putString("info", "India info");
            //you can put any info String, Int, e.g
            intent.putExtras(bundle);
            startActivity(intent);
            break;
        case "Australia":
            bundle.putString("info", "Australia info");
            intent.putExtras(bundle);
            startActivity(intent);
            break;
    }
}

然后您可以从 InfoDisplayer.class onCreate() 方法中获取信息,例如

Bundle bundle = getIntent().getExtras();
String info = bundle.getString("info");

所以你可以在任何你想要的地方使用那个字符串

【讨论】:

  • 如何更改字符串中的文本
  • 你想改哪个字符串?
【解决方案3】:

在您的 onInfoWindowClick 函数中,您需要在要用于启动每个国家/地区活动的 Intent 中设置一个参数:

@Override
public void onInfoWindowClick(Marker marker) {

    if("India".equals(marker.getTitle())) {
        Intent intent = new Intent(this,India.class);
        intent.putExtra("title",marker.getTitle())
        startActivity(intent);
    }
    if("Australia".equals(marker.getTitle())){
        Intent intent = new Intent(this,Australia.class);
        intent.putExtra("title",marker.getTitle())
        startActivity(intent);
    }
}

在所有国家/地区活动中,在 onCreate 中:

@Overrride
public void onCreate(....) {
    .....
    .....
    String title = getIntent().getStringExtra("title");

    TextView txTitle = findViewById( R.id.tittle_textview_identifier_in_your_activity_layout);
    txTitle.setText( title);
    ....
    ....
}

【讨论】:

  • 如果 textview 是 allcountry 布局,我该如何设置参数?以及如何给字符串一些东西以便为 txview 1 和 textview 2 设置文本
  • 对不起,我不明白你的疑问。这段代码有什么错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多