Как я могу передать разные .putextras для какого-либо намерения? - PullRequest
1 голос
/ 07 марта 2020

Так что у меня есть несколько маркеров и пользовательская информация Windows и putextras. Я не знаю, чтобы использовать putextras так много, но я знаю, как использовать их немного. Поэтому я использовал дополнительный метод для переноса данных из MapsActivity в адаптер страны, который я объясню: так что моя идея заключается в том, что когда пользователь нажимает на CustomInfoWindow, открывается намерение с именем адаптер страны. Адаптер этой страны имеет 2 вида текста для заголовка и содержимого. В настоящее время я успешен только в передаче одного набора данных, но другой просто не работает. Возможно, я делаю что-то не так, но я действительно запутался в установке дополнений Put. MapsActivity:

@Override
    public void onInfoWindowClick(Marker marker) {

        if("India".equals(marker.getTitle())) {
            Intent intent = new Intent(this,Country.class);
            intent.putExtra("India","text");

            startActivity(intent);

        }
        if("Australia".equals(marker.getTitle())){
          Intent intent = new Intent(this,Country.class);
          intent.putExtra("Austrailia","text");
// want to create  a method that when this is clicked it gives different texts.
          startActivity(intent);
        }

Адаптер моей страны:

Button bt = findViewById(R.id.button);
        bt.setOnClickListener(v -> openMap());
        TextView countryName = findViewById(R.id.textView);
        TextView Main = findViewById(R.id.textView2);
        Bundle bundle = getIntent().getExtras();

        if(bundle != null) {
            String India = bundle.getString("India");
            countryName.setText("India,South Asia");

        }
        if(bundle != null) {
            String Australia = bundle.getString("Australia");
            countryName.setText("Australia,Oceania");

        }

    }
    public void openMap(){
        finish();
    }
}

Я хочу отображать разные тексты для них обоих, но это не работает. Я очень новичок в этом, поэтому, пожалуйста, ответьте подробно ..

1 Ответ

1 голос
/ 07 марта 2020

Вы на правильном пути, но ваша основная проблема заключается в том, как вы извлекаете данные из пакета Intent.

Во-первых, рассмотрите ваш код:

if(bundle != null) {
    String India = bundle.getString("India");
    countryName.setText("India,South Asia");
}
if(bundle != null) {
    String Australia = bundle.getString("Australia");
    countryName.setText("Australia,Oceania");
}

Вы, по сути, Сначала извлеките информацию об Индии. Независимо от того, успешно ли это, вы затем делаете то же самое для Австралии - перезаписывая текст, который вы только что установили для Индии. Вы сможете увидеть только Австралию в качестве результата.

Ваша вторая проблема заключается в том, как вы используете дополнительные функции Intent. Из документации Android :

publi c Намерение putExtra (имя строки, значение строки)

имя строка: Имя дополнительных данных с префиксом пакета.

value String: Значение данных String. Это значение может быть нулевым.

Поэтому вам лучше использовать дополнительное имя, например com.mypackage.CountryName, а затем установить значение India. После этого вы можете получить отдельный дополнительный Intent с именем com.mypackage.CountryDetails с описательным значением, которое вы хотите показать sh. В вашей MapsActivity:

Intent intent = new Intent(this,Country.class);
if("India".equals(marker.getTitle())) {
    intent.putExtra("com.mypackage.CountryName", "India,South Asia");    
    intent.putExtra("com.mypackage.CountryDetails", "...");
} else if("Australia".equals(marker.getTitle())){
    intent.putExtra("com.mypackage.CountryName", "Australia,Oceania");
    intent.putExtra("com.mypackage.CountryDetails", "...");
}
startActivity(intent);

А в вашей стране Адаптер:

        Button bt = findViewById(R.id.button);
        bt.setOnClickListener(v -> openMap());
        TextView countryName = findViewById(R.id.textView);
        TextView Main = findViewById(R.id.textView2);
        Bundle bundle = getIntent().getExtras();

        if(bundle != null) {
            String name = bundle.getString("com.mypackage.CountryName");
            countryName.setText(name);
            String details = bundle.getString("com.mypackage.CountryDetails");
            countryDetails.setText(details);

            // If you absolutely must do something on a per-country basis, then use a
            // switch or chained if..else inside of this if statement
        }

        // Notice how the second if statement is gone

    }
    public void openMap(){
        finish();
    }
}

Вы можете долго обсуждать делегирование обязанностей и архитектуру. Я игнорирую это сейчас. Но с точки зрения хорошей практики кодирования для присвоения имен вашим дополнениям Intent, посмотрите на этот связанный ответ .

...