কীভাবে বোতাম ক্লিক করে নতুন ক্রিয়াকলাপ শুরু করবেন


625

অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে, অন্য ক্রিয়াকলাপের বোতামটি ক্লিক করা হলে আপনি কীভাবে একটি নতুন ক্রিয়াকলাপ (জিইউআই) শুরু করবেন এবং এই দুটি ক্রিয়াকলাপের মধ্যে আপনি কীভাবে ডেটা পাস করবেন?

উত্তর:


1115

সহজ।

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);

অতিরিক্তগুলি অন্য পক্ষের মাধ্যমে পুনরুদ্ধার করা হয়:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    String value = intent.getStringExtra("key"); //if it's a string you stored.
}

আপনার নতুন ক্রিয়াকলাপটি AndroidManLive.xML এ যুক্ত করতে ভুলবেন না:

<activity android:label="@string/app_name" android:name="NextActivity"/>

18
বোতাম ক্লিক অংশ কোথায়? (বোতাম ক্লিক করুন → পরবর্তী ক্রিয়াকলাপে স্থানান্তর)
জনি

4
@ জনি: একটি বোতাম ক্লিকের একটি উদাহরণ এখানে। stackoverflow.com/a/7722428/442512
এমানুয়েল

8
CurrentActivity.this.startActivity(myIntent)এবং এর মধ্যে কোনও পার্থক্য আছে কি startActivity(myIntent)?
কনফিউজ

5
হ্যাঁ, সহজ লোল। আসলে টাইপ করা কোডের চেয়ে আরও কোডমিসিং রয়েছে। সমস্ত এক্সএমএল ইন্টারফেস এবং জাভা কোড অনুপস্থিত কোথায়? ডাউনভোট
তরল কোর

111
তরল, আপনি কি এটি এটি একটি এপিকেও প্যাক করতে চান? ;)
ক্যাসি মারে

60

একটি ভিউ পার্সন ক্রিয়াকলাপের উদ্দেশ্যে একটি উদ্দেশ্য তৈরি করুন এবং ব্যক্তির পাস করুন (উদাহরণস্বরূপ, একটি ডাটাবেস দেখার জন্য)

Intent i = new Intent(getBaseContext(), ViewPerson.class);                      
i.putExtra("PersonID", personID);
startActivity(i);

তারপরে ভিউপারসন ক্রিয়াকলাপে আপনি অতিরিক্ত ডেটার বান্ডিলটি পেতে পারেন, তা শূন্য নয় তা নিশ্চিত করুন (যদি আপনি কখনও কখনও ডেটা পাস না করেন) তবে ডেটা পান।

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}

এখন আপনার যদি দুটি ক্রিয়াকলাপের মধ্যে ডেটা ভাগ করে নেওয়া দরকার হয় তবে আপনার একটি গ্লোবাল সিঙ্গলটনও থাকতে পারে।

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

তারপরে যেকোন ক্রিয়াকলাপে এটি কল করুন:

YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here.  Could be setter/getter or some other type of logic

58

বর্তমান প্রতিক্রিয়া দুর্দান্ত তবে নতুনদের জন্য আরও বিস্তৃত উত্তর প্রয়োজন। অ্যান্ড্রয়েডে একটি নতুন ক্রিয়াকলাপ শুরু করার জন্য 3 টি বিভিন্ন উপায় রয়েছে এবং তারা সকলেই Intentক্লাস ব্যবহার করে ; অভিপ্রায় | অ্যান্ড্রয়েড বিকাশকারীরা

  1. onClickবাটনের বৈশিষ্ট্যটি ব্যবহার করে । (শিক্ষানবিস)
  2. OnClickListener()একটি বেনাম শ্রেণীর মাধ্যমে একটি বরাদ্দ করা । (অন্তর্বর্তী)
  3. switchবিবৃতি ব্যবহার করে ক্রিয়াকলাপ প্রশস্ত ইন্টারফেস পদ্ধতি । (পূর্বে-)

আপনি যদি অনুসরণ করতে চান তবে আমার উদাহরণটির লিঙ্কটি এখানে :

1. onClickবোতামের বৈশিষ্ট্যটি ব্যবহার করে । (শিক্ষানবিস)

বোতামগুলির একটি onClickবৈশিষ্ট্য রয়েছে যা .xML ফাইলের মধ্যে পাওয়া যায়:

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnActivity"
    android:text="to an activity" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnotherActivity"
    android:text="to another activity" />

জাভা ক্লাসে:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

public void goToAnActivity(View view) {
    Intent intent = new Intent(this, AnActivity.class);
    startActivity(intent);
}

public void goToAnotherActivity(View view) {
    Intent intent = new Intent(this, AnotherActivity.class);
    startActivity(intent);
}

সুবিধা : উড়তে তৈরি করা সহজ, মডুলার এবং সহজেই onClickএকই উদ্দেশ্যে একাধিক গুলি সেট করতে পারে ।

অসুবিধা : পর্যালোচনা করার সময় জটিল পাঠযোগ্যতা।

২. OnClickListener()একটি বেনাম শ্রেণীর মাধ্যমে একটি বরাদ্দ করা । (অন্তর্বর্তী)

এটি যখন আপনি setOnClickListener()প্রত্যেকের জন্য পৃথক সেট করেন buttonএবং প্রত্যেককে onClick()তার নিজস্ব উদ্দেশ্য দিয়ে ওভাররাইড করেন ।

জাভা ক্লাসে:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnActivity.class);
                view.getContext().startActivity(intent);}
            });

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnotherActivity.class);
                view.getContext().startActivity(intent);}
            });

সুবিধা : উড়ে যাওয়া সহজ।

অসুবিধা : অনেক বেনামে ক্লাস থাকবে যা পর্যালোচনা করার সময় পাঠযোগ্যতা কঠিন করে তুলবে।

3. switchবিবৃতি ব্যবহার করে ক্রিয়াকলাপ প্রশস্ত ইন্টারফেস পদ্ধতি । (পূর্বে-)

কার্যকলাপের সমস্ত বোতাম পরিচালনা switchকরার জন্য আপনি যখন onClick()পদ্ধতিতে আপনার বোতামগুলির জন্য একটি বিবৃতি ব্যবহার করেন তখন এটি হয় ।

জাভা ক্লাসে:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            Intent intent1 = new Intent(this, AnActivity.class);
            startActivity(intent1);
            break;
        case R.id.button2:
            Intent intent2 = new Intent(this, AnotherActivity.class);
            startActivity(intent2);
            break;
        default:
            break;
    }

সুবিধা : সহজ বোতাম পরিচালনা কারণ সমস্ত বোতামের উদ্দেশ্যগুলি একটি onClick()পদ্ধতিতে নিবন্ধিত


প্রশ্নের দ্বিতীয় অংশের জন্য, ডেটা পাস করার জন্য, দয়া করে দেখুন কীভাবে আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে ক্রিয়াকলাপগুলির মধ্যে ডেটা পাস করব?


দুর্দান্ত উত্তর, থ্যাঙ্কিউ! আপনি যে কোনও প্রস্তাব ব্যবহার করে কোনও পারফরম্যান্স পেনাল্টি সম্পর্কে জানেন?
lmedinas

3
# 3 "প্রো" নয়। এটি সর্বনিম্ন পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য বিকল্প এবং এটি প্রথম অভিজ্ঞ বিকাশকারী যিনি দেখেন এটি # 1 বা # 2 তে রিফ্যাক্টর হবে। (অথবা তারা
বাটারকেনিফ

আমি মনে করি প্রো প্রোগ্রামাররা মোটেও # 3 পছন্দ করেন না। 1 পদ্ধতির অভ্যন্তরে আইডিক, 10 বোতাম ক্লিক হ্যান্ডলারের একটি দুঃস্বপ্ন এবং এটি মোটেই পেশাদার নয়। কোড জিলিয়ন লাইন সহ পদ্ধতি আপনাকে পেশাদার করে তোলে না। KISS
মেহদী দেহঘানি

3 অবশ্যই "প্রো" নয়
কায়সার কিস্টার

36

যখন ব্যবহারকারী বোতামে ক্লিক করেন, সরাসরি এক্সএমএলের ভিতরে:

<Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextButton"
         android:onClick="buttonClickFunction"/>

বৈশিষ্ট্যটি ব্যবহার করে android:onClickআমরা সেই পদ্ধতির নামটি ঘোষণা করি যা পিতামাতার ক্রিয়াকলাপে উপস্থিত থাকতে হবে। সুতরাং আমি আমাদের কার্যকলাপের ভিতরে এই পদ্ধতিটি তৈরি করতে হবে:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}

19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

2
এটি কেবল একটি আংশিক উত্তর। তদুপরি এটি পর্যাপ্ত নয়, অর্থাত্ প্রকল্পে অতিরিক্ত পরিবর্তন ছাড়া এটি কাজ করবে না।
andr

10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.

8

এমানুয়েল,

আমি মনে করি ক্রিয়াকলাপ শুরু করার আগে অতিরিক্ত তথ্য দেওয়া উচিত অন্যথায় আপনি যদি নেক্সটএটিভিটির অনক্রিট পদ্ধতিতে অ্যাক্সেস করে থাকেন তবে ডেটা উপলব্ধ হবে না।

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

প্রেরণ কার্যকলাপ থেকে নিম্নলিখিত কোডটি চেষ্টা করুন

   //EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
    public static final String EXTRA_MESSAGE = "packageName.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ....

        //Here we declare our send button
        Button sendButton = (Button) findViewById(R.id.send_button);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //declare our intent object which takes two parameters, the context and the new activity name

                // the name of the receiving activity is declared in the Intent Constructor
                Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);

                String sendMessage = "hello world"
                //put the text inside the intent and send it to another Activity
                intent.putExtra(EXTRA_MESSAGE, sendMessage);
                //start the activity
                startActivity(intent);

            }

গ্রহণের ক্রিয়াকলাপ থেকে নিম্নলিখিত কোডটি চেষ্টা করুন:

   protected void onCreate(Bundle savedInstanceState) {
 //use the getIntent()method to receive the data from another activity
 Intent intent = getIntent();

//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);

তারপরে কেবলমাত্র AndroidManLive.xML ফাইলটিতে নিম্নলিখিত কোডটি যুক্ত করুন

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"



5

আপনি এই কোড চেষ্টা করতে পারেন:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);

4

নতুন ক্রিয়াকলাপ শুরু করার উপায়টি হ'ল একটি উদ্দেশ্য সম্প্রচার করা এবং একটি নির্দিষ্ট ধরণের অভিপ্রায় রয়েছে যা আপনি এক ক্রিয়াকলাপ থেকে অন্য কার্যকলাপে ডেটা প্রেরণে ব্যবহার করতে পারেন। আমার সুপারিশ আপনি এর সাথে সম্পর্কিত Android বিকাশকারী ডক্স খুঁজে বার করো হয় ইন্টেন্ট ; এটি বিষয়টিতে তথ্য সমৃদ্ধ, এবং এর উদাহরণও রয়েছে।


4

Kotlin

প্রথম ক্রিয়াকলাপ

startActivity(Intent(this, SecondActivity::class.java)
  .putExtra("key", "value"))

দ্বিতীয় ক্রিয়াকলাপ

val value = getIntent().getStringExtra("key")

প্রস্তাবনা

আরও পরিচালিত উপায়ে সবসময় ধ্রুবক ফাইলে কীগুলি রাখুন।

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))

4

অন্য ক্রিয়াকলাপ থেকে কোনও ক্রিয়াকলাপ শুরু করা অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির মধ্যে খুব সাধারণ দৃশ্য।
কোনও ক্রিয়াকলাপ শুরু করতে আপনার একটি ইনটেন্ট অবজেক্টের প্রয়োজন ।

কীভাবে ইন্টেন্ট অবজেক্টস তৈরি করবেন?

একটি ইন্টেন্ট অবজেক্ট তার কনস্ট্রাক্টরে দুটি পরামিতি নেয়

  1. প্রসঙ্গ
  2. কার্যক্রম শুরু করার নাম of (বা সম্পূর্ণ প্যাকেজের নাম)

উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

সুতরাং উদাহরণস্বরূপ, যদি আপনি দুই কার্যকলাপ নেই বলে HomeActivityএবং DetailActivityএবং আপনি শুরু করতে চান DetailActivityথেকে HomeActivity (HomeActivity -> DetailActivity)।

এখানে কোড স্নিপেট যা দেখায় যে কীভাবে ডিটেলঅ্যাক্টিভিটি শুরু করা যায়

HomeActivity।

Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);

এবং আপনি সম্পন্ন হয়েছে।

ফিরে আসা বোতাম ক্লিক অংশ।

Button button = (Button) findViewById(R.id.someid);

button.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         Intent i = new Intent(HomeActivity.this,DetailActivity.class);
         startActivity(i);  
      }

});

3

এই ক্রিয়াকলাপ থেকে অন্য ক্রিয়াকলাপ শুরু করুন এবং আপনি বান্ডিল অবজেক্টের মাধ্যমে পরামিতিগুলিও পাস করতে পারবেন।

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);

অন্য ক্রিয়ায় ডেটা পুনরুদ্ধার করুন (আপনার ক্রিয়াকলাপ)

String s = getIntent().getStringExtra("USER_NAME");

2

View.OnClickListener ইন্টারফেস প্রয়োগ করুন এবং অনক্লিক পদ্ধতিতে ওভাররাইড করুন।

ImageView btnSearch;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search1);
        ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
        btnSearch.setOnClickListener(this);
    }

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSearch: {
                Intent intent = new Intent(Search.this,SearchFeedActivity.class);
                startActivity(intent);
                break;
            }

2

যদিও ইতিমধ্যে যথাযথ উত্তর সরবরাহ করা হয়েছে তবে আমি কোটলিন ভাষায় উত্তর সন্ধানের জন্য এখানে আছি। এই প্রশ্নটি ভাষা নির্দিষ্ট সম্পর্কে নয় তাই আমি কোটলিন ভাষায় এই কাজটি সম্পাদনের জন্য কোডটি যুক্ত করছি।

অ্যান্ডরিডের জন্য আপনি কীভাবে কোটলিনে এটি করেন

testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }

2

বোতাম ক্লিকে কার্যকলাপ খোলার সর্বাধিক সহজ উপায় হ'ল:

  1. রেজোল্ড ফোল্ডারের অধীনে দুটি ক্রিয়াকলাপ তৈরি করুন, প্রথম ক্রিয়াকলাপে একটি বোতাম যুক্ত করুন এবং onclickকার্য করতে একটি নাম দিন ।
  2. প্রতিটি ক্রিয়াকলাপের জন্য দুটি জাভা ফাইল থাকা উচিত।
  3. নীচে কোডটি দেওয়া হল:

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void goToAnotherActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

SecondActivity.java

package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);
    }
}

AndroidManLive.xml (কেবলমাত্র কোডের এই ব্লকটি বিদ্যমানটিতে যুক্ত করুন)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>

1

প্রথমে এক্সএমএলে বোতামটি নিন।

  <Button
        android:id="@+id/pre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        android:text="Your Text"
        />

বোতামের তালিকা তৈরি করুন।

 pre.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });

1

বোতামটি ক্লিক করা হলে:

loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent= new Intent(getApplicationContext(), NextActivity.class);
        intent.putExtra("data", value); //pass data
        startActivity(intent);
    }
});

এর থেকে অতিরিক্ত ডেটা প্রাপ্ত করতে NextActivity.class:

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}

1

আপনার প্রথম ক্রিয়াকলাপে কোডটি লিখুন।

button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
                       //You can use String ,arraylist ,integer ,float and all data type.
                       intent.putExtra("Key","value");
                       startActivity(intent);
                        finish();
            }
         });

সেকেন্ডঅ্যাক্টিভিটি.ক্লাসে

String name = getIntent().getStringExtra("Key");

1

নীচের মত xML এ বোতাম উইজেট রাখুন

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
/>

এরপরে আরম্ভের পরে নীচের মত ক্রিয়াকলাপে ক্লিক শ্রোতাদের উপর পরিচালনা করুন ..

ক্রিয়াকলাপে তৈরি পদ্ধতিতে:

Button button =(Button) findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent intent = new 
            Intent(CurrentActivity.this,DesiredActivity.class);
            startActivity(intent);
    }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.