简体   繁体   中英

Working with array of intents android

I have about 50 activities in my app and I have an algorithm which displays the title of like 10 of those activities in the form of buttons in a super activity and sets an onclicklistener to each button which contains an intent and it calls the specific activity. I tried to do this via an array of intents but I got no success. Any suggestions on how I can perform this?

package plkk.developers.com.livfit;

// this is my string which contains name of activities

final String ActivityIdMen[] = { "Deadlift", "Pushups", "Barbell_Bench", "Military_Press", "Barbell_Curl", "Close_Bench", "Seated_Cable", "Chinup", "Overhead_Press",
            "Power_Clean", "Jumping_Rope", "Hiit", "Barbell_Bench", "Deadlift", "Lat_Pulldown", "Barbell_Curl", "Skull_Crusher", "Diamond_Dips", "Squats",
            "Hill_Running", "Jumping_Rope", "Stationary_Bike", "Hiit", "Chinup", "Torso_Rotation", "Prone_Plank", "Medicine_Squat", "Front_Squat"
    };

// this is a fragment of the algorithm where I need help

            if(BMI<18.5){
                for(i=0;i<=8;i++) {
                    Button btn = new Button(this);
                    LinearLayout.LayoutParams P = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                    P.weight = 1;
                    btn.setLayoutParams(P);
                    btn.setText(ActivityTextMen[i]);
                    btn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Class clas = null;
                            try{
                                clas = Class.forName("plkk.developers.com.livfit."+ActivityIdMen[i]);
                            }catch (ClassNotFoundException c){
                                c.printStackTrace();
                            }
                            if (clas!=null) {
                                Intent intent = new Intent(view.getContext(), clas);
                                startActivity(intent);
                            }
                        }
                    });
                    ll.addView(btn);
                }

// the intent always directs me to the class at i=9 (in the above case. I tried solving it by using array of intents but couldn't do that properly. 

Remove the weight assigmnent. Did you declare your activities in te manifest file?

Updated

Try to set a Tag with the index. Then use the value of the tag of your button to get the value.

if(BMI<18.5){
        for(i=0;i<=8;i++) {
            Button btn = new Button(this);
            LinearLayout.LayoutParams P = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            P.weight = 1;
            btn.setTag(i);
            btn.setLayoutParams(P);
            btn.setText(ActivityTextMen[i]);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Class clas = null;
                    try{
                        clas = Class.forName("plkk.developers.com.livfit."+ActivityIdMen[Integer.parseInt(""+btn.getTag())]);
                    }catch (ClassNotFoundException c){
                        c.printStackTrace();
                    }
                    if (clas!=null) {
                        Intent intent = new Intent(view.getContext(), clas);
                        startActivity(intent);
                    }
                }
            });
            ll.addView(btn);
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM