【发布时间】:2014-06-03 16:30:40
【问题描述】:
我有两个活动,我想在第一个活动的 ListView 中获取项目位置,以便在第二个活动的操作栏中设置文本。这里是代码:
Adapter.java
package com.cambobox.actionbartitle.actionbar;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class Adapter extends ArrayAdapter<String> {
public Context context;
public String[] value;
public Adapter(Context context, String[] value){
super(context, R.layout.song_list,value);
this.context=context;
this.value=value;
}
@Override
public View getView(int position, View convertView,ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.song_list,parent,false);
TextView textView = (TextView) rowView.findViewById(R.id.song_list);
textView.setText(value[position]);
return rowView;
}
}
SongList.java(第一个活动)
package com.cambobox.actionbartitle.actionbar;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
public class SongList extends ListActivity{
public static String SELECTED="SELECTED";
String[] song_resource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.song_list);
//getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
//ActionBar actionBar = getActionBar();
song_resource = getResources().getStringArray(R.array.song_list);
setListAdapter(new Adapter(this, song_resource));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
SELECTED = (String) getListAdapter().getItem(position);
Intent intent = new Intent(this, Song.class);
intent.putExtra("name",SELECTED);
startActivity(intent);
}
}
Song.java(第二个活动)
package com.cambobox.actionbartitle.actionbar;
import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
public class Song extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_song);
Intent intent = getIntent();
String selected = intent.getStringExtra(SongList.SELECTED);
ActionBar get_actionbar = getActionBar();
get_actionbar.setTitle(selected);
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cambobox.actionbartitle.actionbar">
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".SongList"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Song"></activity>
</application>
【问题讨论】:
-
intent.putExtra("name",SELECTED);是错误的,您需要在 Song 活动中获取“名称”而不是 SongList.SELECTED ,因此您需要在第一个活动中将名称声明为静态值,并在第二个活动中使用 intent.getStringExtra(SongList.NAME) ;如果你是
-
我认为如果你只使用
intent.getStringExtra("name");而不是intent.getStringExtra("SongList.SELECTED");
标签: android listview android-activity android-actionbar