একটি প্যারামিটার দিয়ে একটি ক্রিয়াকলাপ শুরু করুন


292

আমি অ্যান্ড্রয়েড বিকাশে খুব নতুন।

আমি একটি গেম সম্পর্কিত তথ্য দেখানোর জন্য একটি ক্রিয়াকলাপ তৈরি এবং শুরু করতে চাই। আমি সেই তথ্যটি দেখাই আমার একটি গেম আইডি দরকার।

কীভাবে আমি এই গেম আইডিটিকে ক্রিয়াকলাপে পাস করতে পারি? গেম আইডি একেবারে প্রয়োজনীয় তাই আমি আইডি না থাকলে ক্রিয়াকলাপটি তৈরি বা শুরু করতে চাই না।

এটি ক্রিয়াকলাপের মতো একটি পরামিতি সহ কেবলমাত্র একজন নির্মাতা পেয়েছে ।

আমি এটা কিভাবে করবো?

ধন্যবাদ।

উত্তর:


506

নতুনতে intআপনার আইডিটি রাখুন Intent

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

তারপরে আপনার নতুনটিতে আইডিটি ধরুন Activity:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");

42
আপনি এটিকে ধরে ফেলতে শুরু করার আগে অবশ্যই বি! = নালার বিষয়টি নিশ্চিত করতে চাইতে পারেন
অ্যান্ড্রু

"বি" কীভাবে এই কোডের দ্বিতীয় ক্রিয়াকলাপে বাতিল হতে পারে? আমি খ পেয়েছি দ্বিতীয় ক্রিয়াকলাপ তৈরি করার পদ্ধতি বাতিল।
মুরাত ওরলু

3
বি নালু হতে পারে, আপনি এই জায়গাটি অন্য কোনও জায়গা থেকে শুরু করতে চান এবং কোনও প্যারাম ছাড়াই আপনি এটি স্ট্যান্ডার্ড পদ্ধতিতে করতে চান say এটি একটি এনপিই নিক্ষেপ করবে। আপনার এই প্যারামগুলি সর্বদা alচ্ছিক বিবেচনা করা উচিত।
গ্যাস্পার ডি ইলিয়াস

53
একটি নতুন বান্ডিল তৈরি করার প্রয়োজন নেই (এবং আপনি যদি ডকুমেন্টেশন করেন তবে আপনার কীগুলি উপসর্গ করতে প্যাকেজের নামটি "অবশ্যই" ব্যবহার করতে হবে)) সহজভাবে ব্যবহার করুন intent.putExtra(String, Int)
স্যাম

1
কেউ তর্ক করতে পারে যে নাল চেক না করাই ভাল। en.wikedia.org/wiki/Fail-رفেষ্ট
সেথোলোপলাস

124

আপনার ক্রিয়াকলাপটি কল করতে আপনি যে উদ্দেশ্যে ব্যবহার করেন সেটিতে কেবল অতিরিক্ত ডেটা যুক্ত করুন।

কলারের ক্রিয়াকলাপে:

Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);

আপনি যে ক্রিয়াকলাপটি কল করছেন তার অনক্রিট () এর ভিতরে:

Bundle b = getIntent().getExtras();
int id = b.getInt("id");

1
কাস্টম অবজেক্টের ধরণে পাস করা কি ঠিক আছে?
অ্যামিথ

1
@ অ্যামিথ না, আপনাকে গৃহীত উত্তরের মতো একটি বান্ডিল ব্যবহার করতে হবে।
আটলাসাইডার


38

আমি এটি দ্বিতীয় ক্রিয়াকলাপে স্থির পদ্ধতিতে করতে চাই:

private static final String EXTRA_GAME_ID = "your.package.gameId";

public static void start(Context context, String gameId) {
    Intent intent = new Intent(context, SecondActivity.class);
    intent.putExtra(EXTRA_GAME_ID, gameId);
    context.startActivity(intent);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    ... 
    Intent intent = this.getIntent();
    String gameId = intent.getStringExtra(EXTRA_GAME_ID);
}

তারপরে আপনার প্রথম ক্রিয়াকলাপটি (এবং অন্য কোথাও) থেকে আপনি কেবল:

SecondActivity.start(this, "the.game.id");

ঠিক আমি খুঁজছেন ছিল কি! আপনাকে ধন্যবাদ
ম্যাটটিও

1
OnCreate পদ্ধতিতে করা উচিত নয় String gameId = intent.getStringExtra(EXTRA_EXTERNAL_ID);হতেString gameId = intent.getStringExtra(EXTRA_GAME_ID);
marcusshep

স্ট্যাটিক্স থাকা আপনার পরীক্ষাকে খুব শক্ত করে তুলবে।
জন ট্রাইব

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

4

কোটলিন কোড:

শুরু করুন SecondActivity:

startActivity(Intent(context, SecondActivity::class.java)
    .putExtra(SecondActivity.PARAM_GAME_ID, gameId))

আইডিটি এতে পান SecondActivity:

class CaptureActivity : AppCompatActivity() {

    companion object {
        const val PARAM_GAME_ID = "PARAM_GAME_ID"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val gameId = intent.getStringExtra(PARAM_GAME_ID)
        // TODO use gameId
    }
}

যেখানে gameIdহয় String? (নাল হতে পারে)


3

বিদ্যমান উত্তরগুলি (পাসের মধ্যে ডেটা Intentপাস করুন startActivity()) এই সমস্যাটি সমাধানের স্বাভাবিক উপায় দেখায়। আপনি আরও একটি অ্যাপ্লিকেশন (উদাহরণস্বরূপ, কোনও টাস্কর প্লাগইন- এ সম্পাদনা কার্যক্রমের মধ্যে একটি ) তৈরি করতে পারেন এমন একটি ক্রিয়াকলাপ তৈরি করছেন এমন এক অনন্য ক্ষেত্রে এটি ব্যবহার করতে পারে যা অত্যাবশ্যক ক্ষেত্রে ব্যবহৃত হতে পারে এবং তাই Intentযা চালু করে তা নিয়ন্ত্রণ করে না Activity

আপনি একটি বেস-ক্লাস তৈরি করতে পারেন Activityযা একটি প্যারামিটার সহ কনস্ট্রাক্টর রয়েছে, তারপরে একটি উত্পন্ন ক্লাসের একটি ডিফল্ট কনস্ট্রাক্টর রয়েছে যা বেস-ক্লাস কনস্ট্রাক্টরকে একটি মান সহ কল ​​করে:

class BaseActivity extends Activity
{
    public BaseActivity(String param)
    {
        // Do something with param
    }
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("parameter");
    }
}

বেস-ক্লাস কনস্ট্রাক্টরের কাছে যাওয়ার জন্য যদি আপনাকে প্যারামিটার তৈরি করতে হয়, তবে হার্ড কোডিং মানটি কেবল একটি ফাংশন কল দিয়ে প্রতিস্থাপন করুন যা সঠিক মানটি পাস করতে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.