Передача информации не работает с намерениями - PullRequest
1 голос
/ 28 марта 2012

Я устанавливаю информацию в намерение с помощью putExtra () и проверяю с помощью отладчика, что информация действительно есть (и она есть), затем я запускаю другое действие:

startActivity(intent);

, но когдая пытаюсь получить доступ к хранимой информации:

Intent intent = getIntent();
Bundle b = intent.getExtras();

, затем возвращается ноль, фактически, с помощью моего отладчика я вижу, что у намерения нет связанного пакета.

Как это можно решить?


РЕДАКТИРОВАТЬ: вот как я добавлю дополнительные функции:

Это функция, которую я использую:

private Intent baseClickFunction(JSONItem item){
    Intent i = new Intent(MainActivity.this, ItemActivity.class);
    i.putExtra("title", item.getProductName());
    i.putExtra("date", item.getTimestamp());
    i.putExtra("content", item.getFullDescription());

    return i;
}

mListView.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> a, View v,int position, long id) 
            {

                Intent intent = new Intent(baseClickFunction((JSONItem) a.getItemAtPosition(position)));    

                startActivity(intent);
            }
        });

Как ясказал ранее, я проверил с моим отладчиком, что информация действительно в моих намерениях, прежде чем начать новое действие (и это так).

Я даже попытался сделать это:

Intent i = new Intent(MainActivity.this, ItemActivity.class);
                i.putExtra("title", ((JSONItem) a.getItemAtPosition(position)).getProductName());
                i.putExtra("date", ((JSONItem) a.getItemAtPosition(position)).getTimestamp());
                i.putExtra("content", ((JSONItem) a.getItemAtPosition(position)).getFullDescription());
                startActivity(i);

иэто не работает

РЕДАКТИРОВАТЬ: Имеет ли какой-либо эффект тот факт, что я установил слушатель, на котором я делаю это в "protected void onPostExecute (Void result)" AsyncTask?

РЕДАКТИРОВАТЬ: Когда я делаю это в другом проекте, он работает, но в этом он не будет ... Делать AsyncTasks, ListПредставления или вкладки имеют какое-либо влияние на это?

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Вы должны сделать следующее:

mListView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> a, View v,int position, long id) 
        {
            startActivity(baseClickFunction((JSONItem) a.getItemAtPosition(position)));
        }
    });

Возможно, вы переопределяете пакет следующей строкой ...

Intent intent = new Intent(baseClickFunction((JSONItem) a.getItemAtPosition(position)));    

И действительно, создавать новый Намерение не нужно, потому чтоВаш метод уже возвращает Намерение.

0 голосов
/ 28 марта 2012

Это происходит потому, что вы создаете новое намерение без прилагаемых дополнений.

Вы добавляете дополнения к intent i, но начинаете игру с intent intent. Вместо того, чтобы создавать новое намерение, установите намерение, которое вы собираетесь использовать, на возвращенное намерение из вашей функции. Как это:

Intent intent = baseClickFunction((JSONItem) a.getItemAtPosition(position));

Надеюсь, это поможет!

0 голосов
/ 28 марта 2012

если вы делаете:

intent.putExtra("yourkey", value);

вы можете получить с

Intent intent = getIntent();
intent.getIntExtra("yourKey", defaultValue);

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

intent.putExtras(bundle)

до startActivity()

0 голосов
/ 28 марта 2012

Прежде чем звонить startActivity(intent).

, убедитесь, что вы вводите дополнения в свои намерения.
Intent intent = new Intent(...);
intent.putExtra(...);
startActivity(intent);
...