2011-08-17 156 views
0

我知道ActivityGroup處於「過去」,但我想學習如何使用它。所以我編寫了一個簡單的TabHost,並想使用ActivityGroup顯示不同的活動。下面是代碼Android ActivityGroup

Player.java

package player.org; 

import android.app.Activity; 
import android.app.TabActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.AlphaAnimation; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
import android.widget.TabHost; 
import android.widget.TabWidget; 
import android.widget.TextView; 

public class Player extends TabActivity { 
    /** Called when the activity is first created. */ 
    private MediaPlayer media=null; 
    private SeekBar progress; 
    private View play; 
    private Progress p; 
    TabHost tabhost; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs); 
     Resources res=getResources(); 
     //TabHost tabhost=(TabHost) findViewById(R.id.tabhost); 
     // tabhost.setup(); 
     tabhost=getTabHost(); 
     TabHost.TabSpec spec; 
     Intent intent; 
     intent=new Intent(this,Progress.class); 
     spec=tabhost.newTabSpec("now playing").setIndicator("Now playing", res.getDrawable(R.drawable.icon)) 
     .setContent(intent); 
     tabhost.addTab(spec); 
     intent=new Intent(this,Group.class); 
     spec=tabhost.newTabSpec("all_songs").setIndicator("All songs", res.getDrawable(R.drawable.songs)) 
     .setContent(intent); 
     tabhost.addTab(spec); 
     //intent=new Intent(this,Progress.class); 
     spec=tabhost.newTabSpec("artists").setIndicator("Artists", res.getDrawable(R.drawable.icon)) 
     .setContent(intent); 
     tabhost.addTab(spec); 
     spec=tabhost.newTabSpec("alboom").setIndicator("Alboom", res.getDrawable(R.drawable.icon)) 
       .setContent(intent); 
     tabhost.addTab(spec); 
     tabhost.setCurrentTab(0); 
    } 
} 

Group.java

import android.os.Bundle; 
import android.view.View; 

public class Group extends ActivityGroup 
    { 
     @Override 
     public void onCreate(Bundle savedInstanceStated) 

     { 
      super.onCreate(savedInstanceStated); 

      View view = getLocalActivityManager().startActivity("AllSongs", 
      new Intent(this, AllSongs.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 


setContentView(view); 
     } 

AllSongs.java

package player.org; 
import java.util.ArrayList; 

import android.R.id; 
import android.app.ActivityGroup; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TabHost; 

public class AllSongs extends ListActivity{ 
    ArrayList<String> listItem=new ArrayList<String>(); 
    ArrayAdapter<String> adapter; 
    ListView listView; 
    //Player p; 
    TabHost tab; 
    public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      //p=new Player(); 

      adapter=new ArrayAdapter<String>(this,R.layout.list_item,listItem); 
      setListAdapter(adapter); 
      listView=getListView(); 
      listView.setTextFilterEnabled(true); 
      listView.setOnItemClickListener(listener); 

      addItem("vahag"); 
      addItem("vahagvahag"); 



     } 
    private OnItemClickListener listener=new OnItemClickListener() 
    { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 


      Intent intent = new Intent(AllSongs.this,Progress.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      Group group= (Group) getParent(); 
      View view=group.getLocalActivityManager().startActivity("Progress",intent).getDecorView(); 

      setContentView(view); 

     } 


    }; 
    public void addItem(String s) 
     { 
      listItem.add(s); 
      adapter.notifyDataSetChanged(); 
     } 

} 

和Progress.java

package player.org; 
import android.app.Activity; 
import android.app.ActivityGroup; 
import android.app.Dialog; 
import android.app.TabActivity; 
import android.content.Context; 
public class Progress extends Activity { 
    // Called when the activity is first created.  
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
} 
} 
零件

所以,AllSongs.java嘗試改變與進步活動當前活動,但是當我按下列表項中,PROGRAMM forsed關閉,logChat說

「十二月8日至17日:49:26.471:ERROR/AndroidRuntime (1500): 了java.lang.RuntimeException:你的內容必須有一個ListView的ID 屬性爲 'android.R.id.list'」

我想不出如何解決這個問題,CAN有人幫忙嗎?

+0

的問題是,需要的setContentView與特定ID的ListView,但爲什麼,我不能uderstand ((( –

回答

1

問題似乎是,您正在使用ListActivity,但尚未按照ListActivity預期的方式定義ListView

從ListActivity(重點煤礦)的文檔:

ListActivity擁有一個由在屏幕中心的單一, 全屏幕列表的默認佈局。但是,如果您願意,您可以通過在onCreate()中使用setContentView()設置您自己的視圖佈局 來自定義屏幕布局。要做到這一點,自己的視圖必須 包含id爲一個ListView對象「@android:ID /列表」