Java 如何通过在android中创建类的实例来执行onCreate方法

Java 如何通过在android中创建类的实例来执行onCreate方法,java,android,Java,Android,我有MainActivity.java和SongLoad.java。MainActivity.java的代码是 public class MainActivity extends Activity { public static final int LOADREQUEST = 100; private String callerClass = "DoubleMode"; ImageButton loadPlaylist1,loadPlaylist2; ImageButton play1,p

我有MainActivity.java和SongLoad.java。
MainActivity.java
的代码是

 public class MainActivity extends Activity {

public static final int LOADREQUEST = 100;
private String callerClass = "DoubleMode";

ImageButton loadPlaylist1,loadPlaylist2;
ImageButton play1,play2;


SongLoad songloader = new SongLoad(callerClass);
MusicPlayerService musicplayer = new MusicPlayerService();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homescreen);
    loadPlaylist1 = (ImageButton)findViewById(R.id.load_button1);
    loadPlaylist2 = (ImageButton)findViewById(R.id.load_button2);
    play1 = (ImageButton)findViewById(R.id.play1);
    play2 = (ImageButton)findViewById(R.id.play2);
}

public void onLoad(View v) {
    int loadButtonPressed = v.getId();
    songloader.playListGenerator();
    musicplayer.songLoader(songloader.songIndex, loadButtonPressed);.. soon       
SongLoad.java

public class SongLoad extends ListActivity{
public int songIndex = 0;
public String selectedSongPath;
public String callerClass;
final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath());
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
SongLoad(String callerClass) {
    this.callerClass = callerClass; 
}
SongLoad() {

}

@Override
public void onCreate(Bundle savedInstanceState)  {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    if(callerClass == "DoubleMode")
    {
        setContentView(R.layout.playlist);
    }
}

public void playListGenerator() {

    mediaScanner(); 
    for (int i = 0; i < songsList.size(); i++)  {
        // creating new HashMap
        HashMap<String, String> song = songsList.get(i);

        // adding HashList to ArrayList
        songsListData.add(song);
    }

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(this, songsListData,
            R.layout.playlist_item, new String[] { "songTitle" }, new int[] {
                    R.id.songTitle });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();
    // listening to single listitem click
    lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
        // getting listitem index
        songIndex = position;
        selectedSongPath = songsList.get(songIndex).get("songPath");

    }
    });
}
公共类歌曲加载扩展ListActivity{
公共指数=0;
公共字符串selectedSongPath;
公共字符串callerClass;
最终字符串MEDIA_PATH=新字符串(Environment.getExternalStorageDirectory().getPath());
public ArrayList songsList=new ArrayList();
ArrayList songsListData=新的ArrayList();
歌曲加载(字符串调用类){
this.callerClass=callerClass;
}
歌曲负载(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
如果(callerClass==“双模式”)
{
setContentView(R.layout.playlist);
}
}
公共数据生成器(){
mediaScanner();
对于(int i=0;i
现在我的问题是,当我创建一个SongLoad.java对象并调用playligenerator onCreate方法时,会调用它。但是我希望它执行。我该怎么做

如何通过在android中创建类的实例来执行onCreate方法

你没有

当我创建SongLoad.java对象时

public class SongLoad extends ListActivity{
public int songIndex = 0;
public String selectedSongPath;
public String callerClass;
final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath());
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
SongLoad(String callerClass) {
    this.callerClass = callerClass; 
}
SongLoad() {

}

@Override
public void onCreate(Bundle savedInstanceState)  {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    if(callerClass == "DoubleMode")
    {
        setContentView(R.layout.playlist);
    }
}

public void playListGenerator() {

    mediaScanner(); 
    for (int i = 0; i < songsList.size(); i++)  {
        // creating new HashMap
        HashMap<String, String> song = songsList.get(i);

        // adding HashList to ArrayList
        songsListData.add(song);
    }

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(this, songsListData,
            R.layout.playlist_item, new String[] { "songTitle" }, new int[] {
                    R.id.songTitle });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();
    // listening to single listitem click
    lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
        // getting listitem index
        songIndex = position;
        selectedSongPath = songsList.get(songIndex).get("songPath");

    }
    });
}
删除此代码。Android会创建活动实例;您不会。此外:

  • 删除
    SongLoad
    空构造函数

  • 将对
    playligenerator()
    的调用从
    MainActivity
    移动到
    SongLoad的
    onCreate()
    方法

  • main活动的
    onLoad()方法调用
    startActivity()
    启动
    SongLoad
    活动

每个活动都是相对独立地工作的,就像Web应用的一个Web页面不会从同一Web应用中的其他Web页面调用JavaScript函数一样

您最终将需要进行其他更改,例如在执行I/O时正确使用后台线程,但这将帮助您开始


<>你也应该考虑阅读.< /P>在<代码>活动< /代码>上做你的作业,以及如何管理和启动。我读你的“问题”。10次,每次我都不太理解。你想做什么?我同意古纳的观点。我认为你不理解
活动
课程。除非我不理解你的问题,我同意博弗雷多的观点。