অ্যান্ড্রয়েডে লিনিয়ারলআউটে কীভাবে পাঠ্যদর্শন যুক্ত করবেন


128

আমি TextViewsকোডে আমার এক্সএমএল-সংজ্ঞায়িত লেআউটে যুক্ত করার চেষ্টা করছি । আমার একটি এক্সএমএল-শীট রয়েছে, যেখানে অনেকগুলি Viewsসংজ্ঞায়িত করা হয়। তবে আমাকে কোডে কিছু ভিউ যুক্ত করতে হবে, তাই LinearLayoutএক্সএমএল-শীটে একটি তৈরি করুন :

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:id="@+id/info"
android:layout_height="wrap_content" 
android:orientation="vertical">
</LinearLayout>

এবং এই বিন্যাসে, আমি আমার যুক্ত করতে চাই TextView:

    View linearLayout =  findViewById(R.id.info);
    //LinearLayout layout = (LinearLayout) findViewById(R.id.info);


    TextView valueTV = new TextView(this);
    valueTV.setText("hallo hallo");
    valueTV.setId(5);
    valueTV.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

    ((LinearLayout) linearLayout).addView(valueTV);

তবে আমি কেবল নিম্নলিখিত ত্রুটি বার্তাটি পেয়েছি:

: java.lang.ClassCastException: android.widget.TextView

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

আপনার সহযোগিতার জন্য ধন্যবাদ. মার্টিন


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

1
আপনি ঠিক বলেছেন, লিনিয়ারলআউটটি একটি টেক্সটভিউ, তবে কেন? আমি এটি এক্সএমএল-ফাইলে লিনিয়ারলআউট হিসাবে সংজ্ঞায়িত করেছি ...
মার্টিন

1
নিশ্চিত হয়ে নিন যে আপনি উপরে প্রদর্শিত এক্সএমএলটিতে সত্যই পরিচালনা করছেন। setContentView(R.layout.your_xml_layout);সত্যই কি সঠিক এক্সএমএল লোড হচ্ছে? আপনি কি অন্য এক্সএমএল লেআউটগুলি ব্যবহার করেন যেখানে আপনি android:id="@+id/info"টেক্সটভিউ হিসাবে দেখা ব্যবহার করেন?
রডজা

এই সমস্যা সমাধান করা হয়? দয়া করে উত্তর হিসাবে গ্রহণ করুন বা একটি পোস্ট করুন।
তালহা

উত্তর:


105

ব্যবহার করার চেষ্টা করুন

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.info);
...
linearLayout.addView(valueTV);

আপনি যে লেআউট প্যারামগুলি তৈরি করছেন তা লিনিয়ারলআউট.লয়আউটপ্যারামগুলিও নিশ্চিত করুন ...


আবারও একটি ব্যতিক্রম রয়েছে, কারণ FindViewById একটি পাঠ্য ভিউ দেয়। কিন্তু কেন? আমি এটি লিনিয়ারলআউট আইডি দিয়ে আনছি .... আপনি কী বলতে চাইছেন: আপনি যে লেআউট প্যারামগুলি তৈরি করছেন তা লিনিয়ারলআউট.লয়আউটপ্যারামস কিনা তা নিশ্চিত করুন ... ???
মার্টিন

কেন যে কিছু পরিবর্তন হবে? এটি যা করে তা পরবর্তীকালের চেয়ে শীঘ্রই castালাই করা হয়, যার একই প্রভাব হওয়া উচিত।
ইয়েসনেস

70

আরে আমি আপনার কোডটি যাচাই করেছি, আপনার কোডে কোনও গুরুতর ত্রুটি নেই। এটি সম্পূর্ণ কোড:

main.xml: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:id="@+id/info"
android:layout_height="wrap_content" 
android:orientation="vertical">
</LinearLayout>

এটি স্ট্যাকওভারফ্লো.জভা

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Stackoverflow extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View linearLayout =  findViewById(R.id.info);
        //LinearLayout layout = (LinearLayout) findViewById(R.id.info);

        TextView valueTV = new TextView(this);
        valueTV.setText("hallo hallo");
        valueTV.setId(5);
        valueTV.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

        ((LinearLayout) linearLayout).addView(valueTV);
    }
}

এই কোডটি অনুলিপি করুন এবং এটি চালান। এটি সম্পূর্ণ ত্রুটিমুক্ত। যত্ন নিবেন...


আমি যদি নীচের <TextView android:id="@+id/tvDInfo3" android:layout_width="0dp" android:layout_height="wrap_content" android:textStyle="bold" android:text="Release Date" android:gravity="center" android:padding="@dimen/dyk_text_pad" android:textColor="#000000" android:textSize="@dimen/info_text_size" android:layout_weight="1" />
পাঠ্যদর্শনটি দেখতে চাইতাম

1
+1 টি। এই উত্তরটি @ বেনের চেয়ে অনেক ভাল কারণ এতে লেআউটপ্যারামের উদাহরণ রয়েছে এবং কীভাবে বাকি বৈশিষ্ট্যগুলির TextViewআরম্ভ করা হয়। এটি একটি উত্তর হিসাবে চিহ্নিত করা উচিত।
সাববি

3
দ্রষ্টব্য: ২০১৫ সালে FILL_PARENT অবমূল্যায়ন করা হয়েছে, পরিবর্তে আপনার MATCH_PARENT ব্যবহার করা উচিত।
নিকিতা বসিক

22

আপনি TextViewনিজের লিনিয়ার লেআউটে প্রোগ্রামের মতো এটিকে যুক্ত করতে পারেন :

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout);
TextView txt1 = new TextView(MyClass.this);
linearLayout.setBackgroundColor(Color.TRANSPARENT);
linearLayout.addView(txt1);

মাইক্লাস.এটি কী? আমি অ্যান্ড্রয়েড বিকাশে নতুন; আমি কি আমার টুকরা ক্লাসের নামটি "মাইক্লাস" এর জন্য রাখব?
ড্রুস্পথ

1
মাইক্লাস.এটি একটি প্রসঙ্গ এবং একটি পাঠ্য দর্শন একটি প্রসঙ্গে বিবেচনা করে
মিহাই ব্রাটুলেসকু

2
কেবল স্পষ্টকরণের জন্য: MyClass.thisবেশিরভাগ ক্ষেত্রেই একই রকম this। তবে আপনি ক্লাসের নাম উল্লেখ করতে হবে, যদি আপনি কোনও নেস্টেড ক্লাসে থাকেন এবং "বাইরের" শ্রেণীর উদাহরণটি অ্যাক্সেস করতে চান, যা অ্যান্ড্রয়েডের ইভেন্টগুলির জন্য কলব্যাকগুলি সংজ্ঞায়িত করার সময় খুব সাধারণ।
drigoangelo

আমি অনুমান করি যে অ্যান্ড্রয়েড বিকাশকারীরা প্রয়োজনীয় শ্রেণীর নাম রাখার অভ্যস্ত হয়ে গেছে এবং এটিকে সর্বত্র স্থাপন করা শুরু করে। এছাড়াও, MyClass.thisএটি একটি উদাহরণ MyClassএবং এটি কেবল তখনই প্রসঙ্গ হবে যদি মাইক্লাস প্রাসঙ্গিক প্রয়োগ করে (উদাহরণস্বরূপ ক্রিয়াকলাপ প্রসারিত করে)
drigoangelo

20
for(int j=0;j<30;j++) {
    LinearLayout childLayout = new LinearLayout(MainActivity.this);
    LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT);
    childLayout.setLayoutParams(linearParams);

    TextView mType = new TextView(MainActivity.this);
    TextView mValue = new TextView(MainActivity.this);

    mType.setLayoutParams(new TableLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 1f));
    mValue.setLayoutParams(new TableLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 1f));

    mType.setTextSize(17);
    mType.setPadding(5, 3, 0, 3);
    mType.setTypeface(Typeface.DEFAULT_BOLD);
    mType.setGravity(Gravity.LEFT | Gravity.CENTER);

    mValue.setTextSize(16);
    mValue.setPadding(5, 3, 0, 3);
    mValue.setTypeface(null, Typeface.ITALIC);
    mValue.setGravity(Gravity.LEFT | Gravity.CENTER);

    mType.setText("111");
    mValue.setText("111");

    childLayout.addView(mValue, 0);
    childLayout.addView(mType, 0);

    linear.addView(childLayout);
}

10

ডায়নামিকভাবে লিনিয়ারলআউটটিতে টেক্সটভিউ যুক্ত করার জন্য আপনার অনুরূপ কিছু ব্যবহার করা উচিত:

LinearLayout linearLayout = getActivity().findViewById(R.id.infoLayout);

TextView valueTV = new TextView(context);
valueTV.setText("hallo hallo");
valueTV.setId(Integer.parseInt("5"));
valueTV.setLayoutParams(new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.FILL_PARENT,
       LinearLayout.LayoutParams.WRAP_CONTENT));

linearLayout.addView(valueTV);

getActivity () টুকরোগুলির অভ্যন্তরের জন্য ব্যবহৃত হয়, আপনি অভ্যন্তরের প্রতিটি উদাহরণ অনুসারে প্রসঙ্গ বা অনুরূপ কিছু ব্যবহার করতে পারেন।


3

আপনাকে এটির লেআউট রিসোর্সের মাধ্যমে বিন্যাসটি অ্যাক্সেস করতে হবে, কোনও আইডি সংস্থান নয় যা অনন্যরূপে গ্যারান্টিযুক্ত নয়। রিসোর্স রেফারেন্সটি R.layout.my_cool_layout এর মতো দেখতে হবে যেখানে আপনার উপরের এক্সএমএল লেআউটটি রেজ / লেআউট / my_cool_layout.xML এ সঞ্চিত আছে।


0
LinearLayout.LayoutParams layoutParams ;
layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

-2

এখানেই ব্যতিক্রম ঘটে

((LinearLayout) linearLayout).addView(valueTV);

addViewপদ্ধতি টাইপের একটি প্যারামিটার নেয় View, না TextView। অতএব, স্পষ্টভাবে একটি ভিউ অবজেক্টে মান টিভি অবজেক্টটি টাইপ করুন।

সুতরাং, সংশোধিত কোডটি হ'ল:

((LinearLayout) linearLayout).addView((TextView)valueTV);

আপনি কি এটি পরীক্ষা করেছেন?
mrres1

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