2011-04-19 33 views
0

正確。我有一個需要調用另一個活動的操作。據我所知,如果我想解析這個活動的值,我需要使用Intents來實現。使用意圖與動作

但是,我的代碼失敗了,我爲什麼有點失落。

我的主要活動:

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.main); 

    final ArrayList<menuItem> AMI = new ArrayList<menuItem>(); 
    /*Menu item: String name, String menu ID*/ 
    /*ToDo: Logic to fecth new menu structure from server*/ 
    menuItem MI1 = new menuItem("menu item 1","1"); 
    menuItem MI2 = new menuItem("menu item 2","2"); 
    AMI.add(MI1); 
    AMI.add(MI2); 

    GridView gridview = (GridView) findViewById(R.id.GridView01); 
    gridview.setAdapter(new menuAdapter(this, AMI)); 
    gridview.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
     { 
      //Toast.makeText(Runner.this, AMI.get(position).getMenuID(), Toast.LENGTH_SHORT).show();     
      Intent myIntent = new Intent(v.getContext(), showMenu.class); 
      myIntent.putExtra("parentID", AMI.get(position).getMenuID()); 
      startActivityForResult(myIntent, 0); 
     } 
    }); 

的「吐司」工作得很好,但是當我把它叫做崩潰showMenu類。 的showMenu類如下所示:

public class showMenu extends Activity{ 
public String menuParent = ""; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.submenu); 

    Bundle extras = getIntent().getExtras(); 
    if(extras !=null) 
    { 
     menuParent = extras.getString("parentID"); 
    } 
    /*ToDo: Logic to fecth new menu structure from server*/ 
    final ArrayList<menuItem> AMI = new ArrayList<menuItem>(); 
    menuItem MI1 = new menuItem("submenu 1","1"); 
    menuItem MI2 = new menuItem("submenu 2","2"); 
    AMI.add(MI1); 
    AMI.add(MI2); 

    GridView gridview = (GridView) findViewById(R.id.GridView01); 
    gridview.setAdapter(new subMenuAdapter(this, AMI)); 
} 

    public class subMenuAdapter extends BaseAdapter { 
     private ArrayList<menuItem> MIL = new ArrayList<menuItem>(); 
     public static final int ACTIVITY_CREATE = 10; 
     public subMenuAdapter(Context c, ArrayList<menuItem> AMI) { 
      MIL = AMI; 
     } 
     public int getCount() { 
      return MIL.size(); 

     } 
     public Object getItem(int position) { 
      return null; 
     } 
     public long getItemId(int position) { 
      return 0; 
     } 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v; 
      if (convertView == null) { 
       LayoutInflater li = getLayoutInflater(); 
       v = (LinearLayout) li.inflate(R.layout.grid_item, null); 
       TextView tv = (TextView)v.findViewById(R.id.grid_text); 
       tv.setText(MIL.get(position).getMenuname()); 

      } else { 
       v = convertView; 
      } 
      return v; 
     } 
    } 

}

任何想法,爲什麼它會崩潰?

+1

你真的必須讓你的LogCat輸出工作。它會告訴你爲什麼你的應用程序崩潰。 – Klaus 2011-04-19 11:40:02

回答

0

我認爲你必須註冊你的意圖在AndroidManifest.xml中

<activity 
     android:name="Package.Name.showMenu" 
     android:theme="@android:style/Theme.Light"></activity> 
+0

Doh!是的你是對的。錯誤是「ActivityNotFound」,可以對我自己說我忘記註冊了。哦,好吧,至少我現在已經閱讀了意向班。 – Kasper 2011-04-19 13:46:16

0

由於這兩個活動都是從同一個應用程序,還有一些其他的方式,以及之間的,而不是意圖傳遞數據。檢查下面的鏈接:

http://developer.android.com/resources/faq/framework.html#3

如果你只想使用意圖,你能請註明你所面對的錯誤,從而使他人能夠正確地回答你。

0

嘿.. PLZ顯示menuAdapter類,bcose你必須調用Intent從你的menuAdapter到getView()類而不是使用setOnItemClickListener Listner。

0

如果你想解析值到另一個活動,你必須使用startActivityForResult。這就是所謂的sub_activity。