2013-10-09 55 views
0

我想在android中創建一個主菜單活動,它從頁面上的位置動態選擇活動目標。Android動態切換意圖

MainMenu.java

package com.verscreative.BowlTrack; 

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 

public class MainMenu extends SherlockActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_menu); 

     GridView gridview = (GridView) findViewById(R.id.grid); 
     gridview.setAdapter(new HomeMenuAdapter()); 

     gridview.setPadding(50, 40, 50, 40); 

     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       //Activities That are invoked by the click 
       String[] mActivitiesIds = { 
         getString(R.string.menu_launch_0), 
         getString(R.string.menu_launch_1), 
         getString(R.string.menu_launch_2), 
         getString(R.string.menu_launch_3), 
         getString(R.string.menu_launch_4), 
         getString(R.string.menu_launch_5) 
         }; 

       String packageName = "com.verscreative.BowlTrack"; 
       String className = mActivitiesIds[position]+".class"; 
       //TODO: Switch Toast To Activity Intent 
       Intent i = new Intent(); 
       i.setClassName(packageName, className); 
       try{ 
        startActivity(i); 
       }catch(Exception e){ 
        Toast t = Toast.makeText(getApplicationContext(), "Cannot Find Activity", Toast.LENGTH_LONG); 
        t.show(); 
       } 

      } 
     }); 


    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.main_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_settings: 
       activateSettings(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 




    public void activateSettings(){ 
     Intent i = new Intent(this, SettingsActivity.class); 
     startActivity(i); 
    } 



    public class HomeMenuAdapter extends BaseAdapter { 

     public HomeMenuAdapter() { 

     } 

     public int getCount() { 
      return mThumbIds.length; 
     } 

     public Object getItem(int position) { 
      return null; 
     } 

     public long getItemId(int position) { 
      return 0; 
     } 

     // create a new ImageView for each item referenced by the Adapter 
     public View getView(int position, View convertView, ViewGroup parent) { 
      TextView tv; 
      if (convertView == null) { 

       tv = new TextView(getApplicationContext()); 
       tv.setGravity(Gravity.CENTER | Gravity.BOTTOM); 
       tv.setPadding(0, 10, 0, 10); 

      } else { 
       tv = (TextView) convertView; 
      } 

      tv.setCompoundDrawablesWithIntrinsicBounds(0, mThumbIds[position], 0, 0); 
      tv.setText(mTextIds[position]); 
      tv.setHeight(300); 
      tv.setTextColor(Color.WHITE); 

      return tv; 
     } 

     // references to our images 
     private Integer[] mThumbIds = { 
       android.R.drawable.ic_menu_add, 
       android.R.drawable.ic_menu_view, 
       android.R.drawable.ic_menu_info_details, 
       android.R.drawable.ic_menu_close_clear_cancel, 
       android.R.drawable.ic_menu_close_clear_cancel, 
       android.R.drawable.ic_menu_preferences 
       }; 

     private String[] mTextIds = { 
       getString(R.string.menu_item_0), 
       getString(R.string.menu_item_1), 
       getString(R.string.menu_item_2), 
       getString(R.string.menu_item_3), 
       getString(R.string.menu_item_4), 
       getString(R.string.menu_item_5) 
       }; 

    } 


} 

但是無論我做什麼它總是說 「無法找到活動」。

如果我改變:

String packageName = "com.verscreative.BowlTrack"; 
String className = mActivitiesIds[position]+".class"; 

Intent i = new Intent(); 
i.setClassName(packageName, className); 

到例如:

Context packageName = MainMenu.this; 
Class<ViewGamesActivity> className = ViewGamesActivity.class; 

Intent i = new Intent(); 
i.setClass(packageName, className); 

它工作正常,但所有的選項做同樣的事情!


的strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">BowlTrack</string> 
    <string name="action_settings">Settings</string> 
    <string name="menu_item_0">Add New Game</string> 
    <string name="menu_item_1">View Games</string> 
    <string name="menu_item_2">Stats</string> 
    <string name="menu_item_3">3-Not</string> 
    <string name="menu_item_4">4-Not</string> 
    <string name="menu_item_5">Settings</string> 
    <string name="menu_launch_0">NewGameActivity</string> 
    <string name="menu_launch_1">ViewGamesActivity</string> 
    <string name="menu_launch_2">ViewOverallActivity</string> 
    <string name="menu_launch_3">3-Not</string> 
    <string name="menu_launch_4">4-Not</string> 
    <string name="menu_launch_5">SettingsActivity</string> 

    <color name="black">#000000</color> 
    <color name="bwtk">#88078b</color> 

    <string name="title_activity_view_games">View Games</string> 

</resources> 

ViewGamesActivity.java

package com.verscreative.BowlTrack; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 

public class ViewGamesActivity extends SherlockActivity { 

    public class ViewGames extends ListActivity { 

     // Progress Dialog 
     private ProgressDialog pDialog; 

     // Creating JSON Parser object 
     JSONParser jParser = new JSONParser(); 

     ArrayList<HashMap<String, String>> productsList; 

     // url to get all products list 
     private static final String url_all_products = "http://api.androidhive.info/android_connect/get_all_products.php"; 

     // JSON Node names 
     private static final String TAG_SUCCESS = "success"; 
     private static final String TAG_PRODUCTS = "products"; 
     private static final String TAG_PID = "pid"; 
     private static final String TAG_NAME = "name"; 

     // products JSONArray 
     JSONArray products = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_view_games); 

      // Hashmap for ListView 
      productsList = new ArrayList<HashMap<String, String>>(); 

      // Loading products in Background Thread 
      new LoadAllProducts().execute(); 

      // Get listview 
      ListView lv = getListView(); 

      // on seleting single product 
      // launching Edit Product Screen 
      lv.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // getting values from selected ListItem 
        String pid = ((TextView) view.findViewById(R.id.pid)) 
          .getText().toString(); 

        // TODO: Starting new intent 
        // Intent in = new Intent(getApplicationContext(), 
        // EditProductActivity.class); 
        // sending pid to next activity 
        // in.putExtra(TAG_PID, pid); 

        // starting new activity and expecting some response 
        // back 
        // startActivityForResult(in, 100); 
       } 
      }); 

     } 

     // Response from Edit Product Activity 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, 
       Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      // if result code 100 
      if (resultCode == 100) { 
       // if result code 100 is received 
       // means user edited/deleted product 
       // reload this screen again 
       Intent intent = getIntent(); 
       finish(); 
       startActivity(intent); 
      } 

     } 

     /** 
     * Background Async Task to Load all product by making HTTP Request 
     * */ 
     class LoadAllProducts extends AsyncTask<String, String, String> { 

      /** 
      * Before starting background thread Show Progress Dialog 
      * */ 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       pDialog = new ProgressDialog(ViewGamesActivity.this); 
       pDialog.setMessage("Loading products. Please wait..."); 
       pDialog.setIndeterminate(false); 
       pDialog.setCancelable(false); 
       pDialog.show(); 
      } 

      /** 
      * getting All products from url 
      * */ 
      protected String doInBackground(String... args) { 
       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       // getting JSON string from URL 
       JSONObject json = jParser.makeHttpRequest(url_all_products, 
         "GET", params); 

       // Check your log cat for JSON reponse 
       Log.d("All Products: ", json.toString()); 

       try { 
        // Checking for SUCCESS TAG 
        int success = json.getInt(TAG_SUCCESS); 

        if (success == 1) { 
         // products found 
         // Getting Array of Products 
         products = json.getJSONArray(TAG_PRODUCTS); 

         // looping through All Products 
         for (int i = 0; i < products.length(); i++) { 
          JSONObject c = products.getJSONObject(i); 

          // Storing each json item in variable 
          String id = c.getString(TAG_PID); 
          String name = c.getString(TAG_NAME); 

          // creating new HashMap 
          HashMap<String, String> map = new HashMap<String, String>(); 

          // adding each child node to HashMap key => 
          // value 
          map.put(TAG_PID, id); 
          map.put(TAG_NAME, name); 

          // adding HashList to ArrayList 
          productsList.add(map); 
         } 
        } else { 
         // TODO: no products found 
         // Launch Add New product Activity 
         // Intent i = new Intent(getApplicationContext(), 
         // NewProductActivity.class); 
         // Closing all previous activities 
         // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         // startActivity(i); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       return null; 
      } 

      /** 
      * After completing background task Dismiss the progress dialog 
      * **/ 
      protected void onPostExecute(String file_url) { 
       // dismiss the dialog after getting all products 
       pDialog.dismiss(); 
       // updating UI from Background Thread 
       runOnUiThread(new Runnable() { 
        public void run() { 
         /** 
         * Updating parsed JSON data into ListView 
         * */ 
         ListAdapter adapter = new SimpleAdapter(
           ViewGamesActivity.this, productsList, 
           R.layout.list_item, new String[] { TAG_PID, 
             TAG_NAME }, new int[] { R.id.pid, 
             R.id.name }); 
         // updating listview 
         setListAdapter(adapter); 
        } 
       }); 

      } 

     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.main_menu, menu); 
     return true; 
    } 
} 
+1

檢查此 - http://stackoverflow.com/a/9923696/1616443 – jimpanzer

+1

刪除你所擁有的「+」。class「'。該類的完全限定名稱末尾沒有.class。 –

回答

0

感謝jimpanzer和謝里夫 - elkhatib,我結合您的意見中找到了答案。

答案是改變:

String className = mActivitiesIds[position]+".class"; 

這樣:

String className = "com.verscreative.BowlTrack."+mActivitiesIds[position]; 
0

我不認爲你需要指定的.class

試試這個 字符串的className = mActivitiesIds [位置]。

否則,更有效的解決辦法是具有2D陣列這樣:

Object[][] mActivitiesIds = 
{ 
    { getString(R.string.menu_launch_0), Activity1.class } 
    { getString(R.string.menu_launch_1), Activity1.class } 
    { getString(R.string.menu_launch_2), Activity1.class } 
    { getString(R.string.menu_launch_3), Activity1.class } 
    { getString(R.string.menu_launch_4), Activity1.class } 
    { getString(R.string.menu_launch_5) Activity1.class } 
}; 

然後簡單地使用mActivitiesIds [N] [1],以獲得類...