কোটলিন-অ্যান্ড্রয়েড: অমীমাংসিত রেফারেন্স ডেটাবাইন্ডিং


143

আমি নতুন ডাটাবাইন্ডিং লাইব্রেরিটি ব্যবহার করে জাভাতে নিম্নলিখিত খণ্ড ক্লাস করেছি

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

এটি সংকলন এবং সূক্ষ্ম রান।
আমি কোটলিনে এটি আবার লেখার চেষ্টা করেছি এবং নিম্নলিখিতগুলি নিয়ে এসেছি:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

তবে এখন পদক্ষেপ :app:compileDebugKotlinনিম্নলিখিত ফলাফলগুলি আউটপুট করে:

ত্রুটি: (16, 38) সমাধান না করা রেফারেন্স: ডেটাবাইন্ডিং
ত্রুটি: (37, 27) অমীমাংসিত রেফারেন্স: ফ্র্যাগমেন্টডেটাবাইন্ডিং

আমি কীভাবে কোটলিনের সাথে অ্যান্ড্রয়েড-ডেটাবাইন্ডিং লাইব্রেরি ব্যবহার করতে পারি?

আমার শীর্ষ স্তর build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

আমার build.gradleঅ্যাপ্লিকেশন দির (কেবল প্রাসঙ্গিক অংশ):

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'kotlin-android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

আমি অ্যান্ড্রয়েড স্টুডিও ১.৪, বিল্ড সরঞ্জামগুলির সংস্করণ ২৩.০.১, অ্যান্ড্রয়েড এসডিকে ২৩, এসডিকে সরঞ্জামগুলি 24.4.0 ব্যবহার করছি


3
দয়া করে, সংশ্লিষ্ট ইস্যুতে নির্দ্বিধায় ভোট দিন: https://youtrack.jetbrains.com/issue/KT-8007
Ghedeon

1
আপনার কেবলমাত্র apply plugin: 'kotlin-kapt'সাম্প্রতিক সংস্করণে অ্যাপ গ্রেড ফাইল থাকা দরকার ।
হেসাম

প্রাইভেট ল্যাটিনিট ভার বাইন্ডিং: ফ্রেগমেন্টডাটা বাঁধাই প্রাথমিককরণের একটি ভাল উপায়
ডিনো সানি

উত্তর:


85

এই কনফিগারেশনটি ব্যবহার করার চেষ্টা করুন:

প্রধান বিল্ড.gradle এ :

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
    //... rest of the content
    }
}

অ্যাপ build.gradle :

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$android_plugin_version"
}

kapt {
    generateStubs = true
}

1
@ ইরামপাজ্জো, 2.2.0-alphaXউপলব্ধ এবং এফওয়াইআই তথ্য-বাইন্ডিংয়ের সংস্করণটি অ্যান্ড্রয়েড-গ্রেডেল-প্লাগইনের মতোই। সুতরাং আপনি সেই সংস্করণটি বহিরাগত করতে এবং এটি সংকলকের সংস্করণ হিসাবে ব্যবহার করতে পারেন।
অবিনাশ আর

1
আমি নিশ্চিত করতে পারি যে এই উত্তরটি আমার সমস্যাটি ডেটাবাইন্ডিং এবং কোটলিনের সাথে স্থির করেছে
রাবি জেরাদি

12
আমাকেও যুক্ত apply plugin: 'kotlin-kapt'করতে হয়েছিল দেখুন stackoverflow.com/a/42974558/1916449
arekolek

আমি এই চেষ্টা করেছিলাম। এখন এটি আমাকে একটি বিজ্ঞপ্তি নির্ভরতা ত্রুটি দেয়। এ সম্পর্কে কোন ধারণা?
লিওরিওন

চেক আউট এই বিষয়ে অফিসিয়াল ডকুমেন্টেশনের জন্য কোটলিংলং.আর্গ / ডকস / টিউটোরিয়ালস /
ব্রায়ান

72

আমি নতুন সমাধান খুঁজে পেয়েছি, আশা করি এটি আপনাকে সহায়তা করবে।

প্লাগইন প্রয়োগ হয়েছে কিনা তা সবার আগে পরীক্ষা করুন:

apply plugin: 'kotlin-kapt'

তারপর

android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

নির্ভরতাতে আপনার একটি ত্রুটি থাকতে পারে:

ব্যবহারের

kapt 'com.android.databinding:compiler:3.0.1'

পরিবর্তে

compile 'com.android.databinding:compiler:3.0.1'

আপনি এখানে দেখতে পারেন নতুন সংস্করণ জন্য

ধন্যবাদ.


6
আমার এখনও এই সমস্যাটি রয়েছে :(
ম্লাদেন রাকনজাক

এটি আমার জন্য কাজ করছে (গ্রেডেল মোড়ক 4.4, সরঞ্জাম 3.1.0)
সেরজিও

'কম.অ্যান্ড্রয়েড.ড্যাটাবাইন্ডিং: সংকলক: 3.0.1' আমার জন্য কাজ করে
ডুরান জেইসন

এটি কেবল "প্রয়োগ প্লাগইন: 'কোটলিন-ক্যাপ্ট" যোগ করে আমার পক্ষে কাজ করেছে। ধন্যবাদ।
সুবহান আলী

সবেমাত্র যোগ করা হয়েছে এই লাইনটি আমার জন্য কাজ করছে (প্লাগইন প্রয়োগ করুন: 'কোটলিন-ক্যাপ্ট') অ্যান্ড্রয়েড স্টুডিও ৩.২.১ - কোটলিন প্লাগইন ১.৩.০
মোহাম্মদ এলসওয়াফ

14

আপডেট 2: এটি সত্যিই একটি পুরানো উত্তর, পরিবর্তে লম্প্পাজোর উত্তরটি উল্লেখ করুন।

এটি 1.0-আরসি 4, পুট সহ কাজ করে

kapt 'com.android.databinding:compiler:1.0-rc4' 

আপনার নির্ভরতা মধ্যে

মন্তব্যে এই লিঙ্কের জন্য গিদিওনকে ধন্যবাদ

আপডেট : এখানে একটি খুব সহজ হ্যালো ওয়ার্ল্ড উদাহরণ প্রকল্প


আমি এখনও একই ত্রুটি পেয়েছি, আমি কি এখানে কিছু ভুল করছি? gist.github.com/xdgimf/820c433efa8307821788
মিগুয়েল ফার্মিন

এখানে আপনার বিল্ড.gradle ফাইলটি আপনার যদি রেফারেন্সের দরকার হয় gist.github.com/jayदीप17
জয়দীপ

@ জয়দীপ সবেমাত্র এটি চেষ্টা করে দেখেছেন এবং এটি কাজ করছে। তবে অ্যান্ড্রয়েড স্টুডিও সিনট্যাক্স হাইলাইট করে না এবং বার্তা সহ প্রচুর আইডিই ত্রুটি উত্পন্ন করে Exception while analyzing expression at (12,23) in /projectpath/KotlinDataBinding/app/src/main/java/com/example/kotlindatabinding/MainActivity.kt:। আপনি কি একই ত্রুটি আছে? এবং আপনার অ্যান্ড্রয়েড স্টুডিও সংস্করণ কি?
মিখাইল

@ আরকাদিয়ে এটি ইতিমধ্যে youtrack.jetbrains.com/issue/KT-8007 বিটিডাব্লু রিপোর্ট করা হয়েছে আমি স্টুডিওতে রয়েছি V1.5 পূর্বরূপ 2
জয়দীপ

এটি আর প্লাগইনের সর্বশেষতম সংস্করণ নয়। এটি অপ্রয়োজনীয় ব্যথা ঘটায়।
অবিনাশ আর

13

ডেটা বন্ডিং সংকলকের সংস্করণটি আপনার প্রকল্পের বিল্ডগ্র্যাড ফাইলের গ্রেড সংস্করণ হিসাবে সমান:

// at the top of file 
apply plugin: 'kotlin-kapt'


android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.android.databinding:compiler:3.0.0-beta1"
}

এবং গ্রেড সংস্করণ হয়

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

কোটলিনে ডেটাবাইন্ডিং লাইব্রেরি ব্যবহার সম্পূর্ণ করার জন্য এখানে একটি উদাহরণ লিঙ্ক।

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6


dataBinding.enabled = trueযা আমি ভুলে যাচ্ছিলাম
সিজার কাস্ত্রো

7

সমস্যা সমাধানের জন্য আপনাকে অবশ্যই রাখতে হবে

apply plugin: 'kotlin-kapt'

build.gradle (মডিউল: অ্যাপ) এর শীর্ষে, তারপরে নির্ভরতাগুলিতে এই লাইনটি রাখুন

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

আপনি মেনুতে গিয়ে অ্যান্ড্রয়েড প্লাগইন সংস্করণটি সন্ধান করতে পারেন

File > Project Structure > Project

তারপরে আবার সিঙ্ক করুন। আপনি যদি এই সতর্কতাটি দেখেন তবে এটিকে উপেক্ষা করুন।

তৃতীয় পক্ষের গ্রেডল প্লাগইনগুলির কারণ হতে পারে


6

এটি ব্যবহার করে দেখুন ndঅ্যান্ড্রিড স্টুডিও ২.০ (২.১)

বিল্ড . gradle এ

android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

আমার প্রকল্পে: buildToolsVersion = "23.0.3"

শীর্ষ স্তরের build.gradle এ

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }

2
সংকলক এবং অ্যান্ড্রয়েড বিল্ড সরঞ্জাম গ্রেড প্লাগইন উভয়ের জন্য আপনার একই সংস্করণ ব্যবহার করা উচিত। অন্যথায় এটি অপ্রত্যাশিত বিল্ড সমস্যা তৈরি করতে পারে।
অবিনাশ আর

আমাকে প্রয়োগ প্লাগইন যুক্ত করতে হয়েছিল: 'কোটলিন-ক্যাপ্ট'
আন্দ্রেই

6

এই অ্যান্ড্রয়েড স্টুডিও আমার জন্য কাজ ver3.1.3

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

ব্যবহারের নমুনা দেখান


4

কোটলিনে কনফিগারেশন ডেটা বাইন্ডিং

build.gradle (ফোল্ডার অ্যাপ)

apply plugin: 'kotlin-kapt'

android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

কোটলিন উপভোগ করুন ...


প্লাগইন প্রয়োগ করুন: কোটলিনে 'কোটলিন-ক্যাপ্ট' সত্যিই গুরুত্বপূর্ণ।
রাহুল রাস্তোগি

3

গুরুত্বপূর্ণ আপডেট

আপনি অ্যান্ড্রয়েডের ডকুমেন্টেশনে দেখতে পারেন

সংস্করণ 3.2 এ নতুন সংকলকটি ডিফল্টরূপে সক্ষম করা হয়েছে।

তাই শুধু আপডেট করুন আপনার v3.2 অ্যানড্রইড স্টুডিও বা নতুন । এবং সমস্ত অপ্রয়োজনীয় কনফিগারেশন সরান।

সুতরাং কেবল অ্যাপ স্তরে ডেটাবাইন্ডিং সক্ষম করুন build.gradle

android {
    dataBinding {
        enabled = true
    }
}

এটি স্বয়ংক্রিয়ভাবে আপনার জন্য সমস্ত কিছু করবে।

আপনি লাইনগুলির নীচে নিরাপদে অপসারণ করতে পারেন-

  • ডেটাবাইন্ডিং ডটকমারকে সরান

    kapt 'com.android.databinding:compiler:3.0.1'
  • অপসারণ kapt

    kapt {
        generateStubs = true
    }

আমার সম্পূর্ণ কনফিগার

build.gradle (প্রকল্প)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

গ্রেড সর্বশেষ সংস্করণ ব্যবহার করুন । কোটলিন সর্বশেষ সংস্করণ ব্যবহার করুন ।

build.gradle (অ্যাপ)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

গুরুত্বপূর্ণ শুধুমাত্র কনফিগারেশন অনুলিপি এবং পেস্ট করবেন না। কোটলিন সংস্করণ স্থাপনের জন্য এই উত্তরটি দেখুন ।

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

আমার প্রকল্পটি এখনও গ্রেড 3.0.০.১ রিলিজে রয়েছে তাই এটি আমার পক্ষে কার্যকর হয়নি।
নকি

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

3

আমার ক্ষেত্রে, ত্রুটিটি ছিল Unresolved reference: RegisterationUserBindingআমি ঠিক আমার লেআউটটির নামটি fragment_registeration_userএভাবে ব্যবহার করেছি FragmentRegisterationUserBindingএবং এটি ডেটাবাইন্ডিং বিন্যাসে তৈরি করেছি এবং ত্রুটিটি চলে গেছে।


তুমি মহান! সমস্যা সমাধানের জন্য আমি একাধিক পরামর্শ প্রয়োগ করতে অনেক সময় ব্যয় করেছি তবে এই উত্তর না পাওয়া পর্যন্ত অসহায়। টুকরা বিন্যাসের নাম অনুসারে বাইন্ডিং পরিবর্তন করা সমস্যার সমাধান করে। অনেক ধন্যবাদ.
অজয়

খুশি এটি আপনাকে সাহায্য করেছে
এল টেগানি মোহাম্মদ হামাদ গবির

2

আপনার অনুসরণ অনুসরণ করুন app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

এই কৌশলটি করবে।

$android_plugin_version এর সংস্করণ com.android.tools.build:gradle হয়application build.gradle

এছাড়াও, এটি আপনার মডিউলে যুক্ত করুন build.gradle

android { /// Existing Code kapt { generateStubs = true } }


0

আপনার কোটলিন ভাষা ব্যবহার করার সময় অ্যান্ড্রয়েড প্রকল্পে ডেটাবাইন্ডিং যুক্ত করুন।

নীচে পদক্ষেপ

- প্রথম আপনাকে নীচের প্লাগইন যুক্ত করতে হবে

**apply plugin: 'kotlin-kapt'**

- সেকেন্ড ডাটাবাইন্ডিং সক্ষম হয়েছে সত্য

**dataBinding {
        enabled = true
    }**

এই সমস্ত পয়েন্টটি "SYNC এখন" হিট করার পরে app.build.gradle এ যুক্ত হয়েছে point

উদাহরণস্বরূপ, আপনার প্রোফাইল ক্রিয়াকলাপ সম্পাদনা করতে হবে তবে কোটলিনে কীভাবে বাইন্ডিং ভেরিয়েবল সংজ্ঞা দেওয়া যায় ??

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

এখানে, বাইন্ডিংটি হ'ল পদ্ধতিটি হ'ল কোন ধরণের বাইন্ডিং অবজেক্টটি পরিচালনা করা

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

ডেটাবাইন্ডিং লাইব্রেরি ক্যাপ্ট 'কম.অ্যান্ড্রয়েড.ডাটাবাইন্ডিং: সংকলক: 2.3.1'
শ্রীপাল শাহ

0

আমার ক্ষেত্রে, অ্যাড

kapt {
    generateStubs = true
}

আমার জন্য সমস্যা সমাধান। আমি এটিকে প্রথম উপেক্ষা করেছি, আমি ভেবেছিলাম এটি সমস্যার সাথে সম্পর্কিত নয়:

অমীমাংসিত রেফারেন্স ডেটাবাইন্ডিং

তবে এখন, ডেটা-বাঁধাই ঠিক কাজ করছে।


0

আমি আমার নিজের স্বীকৃতিটি শেয়ার করতে চাই। অ্যান্ড্রয়েড স্টুডিওতে কোটলিনের সাথে ডেটাবেন্ডিং ডেটা ব্যবহার করতে যুক্ত করার জন্য যথেষ্ট

dataBinding {
    enabled = true
}

এর পরে "এটিকে সিঙ্ক করুন" এবং, "প্রকল্প তৈরি করা" এটি অত্যন্ত গুরুত্বপূর্ণ। এর পরে আপনার সমস্ত অবজেক্ট ব্যবহার করতে সক্রিয় হবে।


0

ফ্রেগমেন্ট-ডেটেলস বাইন্ডিং ব্যবহার করার চেষ্টা করার আগে আপনাকে নিশ্চিত করতে হবে যে আপনি "" আবদ্ধ লেআউটটিকে (ফ্রেগমেন্ট_ডেটেলস। এক্সএমএল) ডেটা বাঁধাই লেআউটে রূপান্তরিত করে "" সম্পূর্ণ লেআউটটিকে ট্যাগ প্যারেন্টে আবদ্ধ করে এবং সমস্ত এক্সএমএলএনসকে লেআউট ট্যাগে নিয়ে যান এবং প্রজেক্টটি তৈরি করে এবং এটি স্থির করে


-1

সমস্ত ডেটাবাইন্ডিং নির্ভরতা থেকে বেরিয়ে এসে এর পরিবর্তে এটি ব্যবহার করুন

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