Использование намерения с действиями - PullRequest
0 голосов
/ 19 апреля 2011

правый.У меня есть действие, которое должно вызвать другое действие.Как я понимаю, мне нужно использовать 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;
        }
    }

}

Есть идеи, почему происходит сбой?

Ответы [ 4 ]

0 голосов
/ 19 апреля 2011

Если вы хотите проанализировать значения для другого действия, вы должны использовать startActivityForResult. Это называется sub_activity.

0 голосов
/ 19 апреля 2011

Поскольку оба действия относятся к одному и тому же приложению, существуют и другие способы передачи данных вместо намерений.проверьте ссылку ниже:

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

Если вы хотите использовать только намерения, пожалуйста, укажите ошибку, с которой вы столкнулись, чтобы кто-то мог ответить вам правильно.

0 голосов
/ 19 апреля 2011

эй .. плз покажите класс menuAdapter, потому что вам нужно вызвать Intent из вашего menuAdapter в класс getView() вместо использования setOnItemClickListener Listner.

0 голосов
/ 19 апреля 2011

Я думаю, вы должны зарегистрировать свое намерение в вашем AndroidManifest.xml

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