Abbas Haghayeghi
Abbas Haghayeghi

Reputation: 41

startActivity from a custom class

I have a menu and 5 activities. To avoid repeating the menu code, I have created a public class and call it in every activity:

 Testclass testclass = new Testclass(Main.this);

...but unfortunately I can't use startActivity() in the class. This is my class code:

 public class Testclass extends Activity {

     public Testclass(Activity cc) {
         Intent intent = new Intent(cc,Next.class);
            startActivity(intent);
     }
 }

Upvotes: 0

Views: 1025

Answers (5)

Hashan Madusanka
Hashan Madusanka

Reputation: 9

#you can used Weak Reference Objects to store Context of Activity class#

##in activity class## 

public class Activity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);


        findViewById(R.id.toNext).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {


        Testclass thread = new Testclass(Activity.this,v);
        new Thread(thread).start();

        }
    }

}

// in sub class
public class Testclass extends Activity implements Runnable {
    View landingPage;

    private Activity activity;

    public Testclass (Activity activity, View landingPage){
        WeakReference<Activity> ActivityWeakReference = new WeakReference<>(Activity);

        this.landingPage = landingPage;
        this.activity = activityWeakReference.get();
    }

    @Override
    public void run() {

        Intent activityIntent = new Intent(activity, Next.class);
        activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                switch (landingPage.getId())
                {
                    case R.id.Next.class:
                        activity.finish();
                        activity.startActivity(activityIntent);
                        break;

                }

            }
        });


    }
}

Upvotes: 0

Anggrayudi H
Anggrayudi H

Reputation: 15155

Why not use this code?

startActivity(new Intent(Main.this, Next.class));
// "Main" is your current Activity
// "Next" is your next Activity to be opened.

I think, it's very simple to use without create a new public class. Please compare your codes with my code above, only one line.

Upvotes: 1

Skizo-ozᴉʞS ツ
Skizo-ozᴉʞS ツ

Reputation: 20626

Try this and tell me if it helped you.

public class Testclass extends Activity {

     public Testclass(Activity cc) {
         final Context context = Testclass.this.getContext();
                Intent intent = new Intent(context , Next.class);
                context.startActivity(intent);
     }
 }    

Upvotes: 2

einschnaehkeee
einschnaehkeee

Reputation: 1888

You misunderstood the concept of an Activity and its life cycle. You DON'T instantiate the Activity, the Activity has callback mechanisms (onCreate, onResume, etc.) that tell you exactly what to do. You never ever have to call new Activity(). The fact that you're doing Testclass testclass = new Testclass(Main.this); shows that you have a misunderstanding of this concept: http://developer.android.com/training/basics/activity-lifecycle/index.html

To fix your error, read the docs and then it will be clear what is wrong with your approach.

Hint: Your Testclass already IS an Activity, because you inherit from Activity.

And next time please provide the whole error log to your problem, so it can give the whole picture of what can be wrong with your code.

Upvotes: 1

wecky
wecky

Reputation: 910

I think you don't use the correct Context to start the Intent.

Instead try

{

public Testclass() {
         Intent intent = new Intent(this,Next.class);
            startActivity(intent);
     }
}

if the this doesn't work either, try getApplicationContext() instead.

Upvotes: 0

Related Questions