【问题标题】:Cannot get Item position in ListView on first Activity to setText in Action bar title on second Activity无法在第一个 Activity 的 ListView 中获取项目位置以在第二个 Activity 的操作栏标题中设置文本
【发布时间】: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


【解决方案1】:

您好,我已经更正了您的错误代码

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 NAME="Name";
private String name;
String[] song_resource;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 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);
name = (String) getListAdapter().getItem(position);
Intent intent = new Intent(this, Song.class);
intent.putExtra(NAME,name);
startActivity(intent);

}

}

在歌曲活动中

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.NAME);
ActionBar get_actionbar = getActionBar();
get_actionbar.setTitle(selected);

}

}

我认为它会起作用

【讨论】:

  • 您知道我是否想通过使用您的代码在操作栏中使用自定义字体吗?谢谢你的帮助..
  • public class Song extends ActionBarActivity { Typeface font; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_song);字体 = Typeface.createFromAsset(getAssets(),"fonts/khmerbibleregular.ttf");意图意图 = getIntent(); String listview_id = intent.getStringExtra(SongList.NAME); ActionBar actionnbar_title = getActionBar(); actionnbar_title.setTitle(listview_id); } }
猜你喜欢
  • 2013-12-05
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多