অ্যান্ড্রয়েডে গতিশীলভাবে ভিউগুলি যুক্ত এবং সরান?


126

আমি কিভাবে যুক্ত করব এবং অপসারণ যেমন দেখেন TextViewমূল স্টক Android পরিচিতিগুলিতে পর্দায় মত Android অ্যাপ্লিকেশন থেকে গুলি যেখানে আপনি একটি ক্ষেত্র ডানদিকে একটি ছোট আইকন টিপুন এবং সেটিকে যোগ বা ক্ষেত্রটিতে কোনও নিয়ে গঠিত যা মুছে ফেলে TextViewএবং editTextView(কি থেকে আমি দেখতে পাচ্ছি).

এটি অর্জন করার জন্য কোনও উদাহরণ?

উত্তর:


222

ViewParentগুলি সাধারণভাবে দর্শনগুলি মুছে ফেলতে পারে না তবে তা ViewGroupপারে। আপনি যা চান তা পূরণ করতে আপনার পিতামাতাকে একটি ViewGroup(যদি এটি হয় তবে ViewGroup) কাস্ট করতে হবে।

উদাহরণ স্বরূপ:

View namebar = View.findViewById(R.id.namebar);
((ViewGroup) namebar.getParent()).removeView(namebar);

নোট করুন যে সমস্ত Layoutগুলি হয় ViewGroupগুলি।


2
ভিউ প্যারেন্ট একটি সাবউভি মুছে ফেলতে পারে না, তবে ভিউগ্রুপ পারে।
টমাসডাব্লু

1
লিঙ্কটি নষ্ট হয়ে গেছে। এই মেটা প্রশ্নে যেমনটি দেখা হয়েছে তেমন কোনও বহিরাগত লিঙ্কের পুরো উত্তরটি সম্পর্কিত এড়িয়ে চলুন: মেটা.স্ট্যাকেক্সেঞ্জার
উইলিয়ান সোয়ারস

হাই, আমি সুপারভাইজ থেকে সারফেসভিউ রেন্ডারারকে সরাতে পারি না, আপনি কি সহায়তা করতে পারেন?
ফামফামফাম

39

এই প্রশ্নে বর্ণিত ঠিক একই বৈশিষ্ট্যটি আমার দরকার। এখানে আমার সমাধান এবং উত্স কোড: https://github.com/laoyang/android-dynamic- ভিউগুলি । এবং আপনি এখানে কর্মের ভিডিও ডেমো দেখতে পারেন: http://www.youtube.com/watch?v=4HeqyG6FDhQ

বিন্যাস

মূলত আপনি দুটি এক্সএমএল লেআউট ফাইল পাবেন:

  • একটি অনুভূমিক LinearLayout সারি দৃশ্য একটি সঙ্গে TextEditএকটি Spinnerএবং একটি ImageButtonমুছে ফেলার জন্য।
  • একটি নতুন নতুন যুক্ত বোতাম সহ একটি উল্লম্ব লিনিয়ারলআউট কনটেইনার ভিউ

নিয়ন্ত্রণ

জাভা কোডে, আপনি পাত্রে রোল ভিউগুলি গতিশীলভাবে যুক্ত এবং সরিয়ে ফেলবেন, ইনফ্লিট, অ্যাডভিউ, রিমুভ ভিউ ইত্যাদি ব্যবহার করে স্টক অ্যান্ড্রয়েড অ্যাপে আরও ভাল ইউএক্সের জন্য কিছু দৃশ্যমানতা নিয়ন্ত্রণ রয়েছে। প্রতিটি সারিতে সম্পাদনা পাঠের দৃশ্যের জন্য আপনার একটি পাঠ্য ওয়াচচার যুক্ত করা দরকার: পাঠ্যটি ফাঁকা থাকলে আপনাকে যুক্ত করতে হবে নতুন বোতাম এবং মুছুন বোতামটি hide আমার কোডে, আমি void inflateEditRow(String)সমস্ত যুক্তির জন্য একটি সহায়ক ফাংশন লিখেছি ।

অন্যান্য কৌশল

  • android:animateLayoutChanges="true"অ্যানিমেশন সক্ষম করতে এক্সএমএল সেট করুন
  • সাথে কাস্টম স্বচ্ছ পটভূমি ব্যবহার করুন চাপা নির্বাচক বোতাম চাক্ষুষরূপে স্টক Android অ্যাপে বেশী হিসাবে একই না।

সোর্স কোড

মূল ক্রিয়াকলাপের জাভা কোড (এটি সমস্ত যুক্তি ব্যাখ্যা করে তবে বেশ কয়েকটি বৈশিষ্ট্য এক্সএমএল লেআউট ফাইলগুলিতে সেট করা থাকে, সম্পূর্ণ সমাধানের জন্য দয়া করে গিথুব উত্সটি দেখুন):

public class MainActivity extends Activity {
// Parent view for all rows and the add button.
private LinearLayout mContainerView;
// The "Add new" button
private Button mAddButton;
// There always should be only one empty row, other empty rows will
// be removed.
private View mExclusiveEmptyView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.row_container);
    mContainerView = (LinearLayout) findViewById(R.id.parentView);
    mAddButton = (Button) findViewById(R.id.btnAddNewItem);

    // Add some examples
    inflateEditRow("Xiaochao");
    inflateEditRow("Yang");
}

// onClick handler for the "Add new" button;
public void onAddNewClicked(View v) {
    // Inflate a new row and hide the button self.
    inflateEditRow(null);
    v.setVisibility(View.GONE);
}

// onClick handler for the "X" button of each row
public void onDeleteClicked(View v) {
    // remove the row by calling the getParent on button
    mContainerView.removeView((View) v.getParent());
}

// Helper for inflating a row
private void inflateEditRow(String name) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.row, null);
    final ImageButton deleteButton = (ImageButton) rowView
            .findViewById(R.id.buttonDelete);
    final EditText editText = (EditText) rowView
            .findViewById(R.id.editText);
    if (name != null && !name.isEmpty()) {
        editText.setText(name);
    } else {
        mExclusiveEmptyView = rowView;
        deleteButton.setVisibility(View.INVISIBLE);
    }

    // A TextWatcher to control the visibility of the "Add new" button and
    // handle the exclusive empty view.
    editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {

            // Some visibility logic control here:
            if (s.toString().isEmpty()) {
                mAddButton.setVisibility(View.GONE);
                deleteButton.setVisibility(View.INVISIBLE);
                if (mExclusiveEmptyView != null
                        && mExclusiveEmptyView != rowView) {
                    mContainerView.removeView(mExclusiveEmptyView);
                }
                mExclusiveEmptyView = rowView;
            } else {
                if (mExclusiveEmptyView == rowView) {
                    mExclusiveEmptyView = null;
                }
                mAddButton.setVisibility(View.VISIBLE);
                deleteButton.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        }
    });

    // Inflate at the end of all rows but before the "Add new" button
    mContainerView.addView(rowView, mContainerView.getChildCount() - 1);
}

1
@ স্বপনিলসোনার আপনি .getChildAt (i) এবং .getChildCount () দিয়ে এমকন্টেইনর ভিউয়ের মাধ্যমে পুনরাবৃত্তি করতে পারেন, প্রতিটি শিশু একটি সম্পাদনা সারি row
এক্সওয়াই

এই এসও তেমন কিছু নিয়ে কাজ করছিল যা এটি ভালভাবে কাজ করে
শ্রীকান্ত রূপা

আমার স্ক্রিনের উচ্চতা অনুসারে, আমি 7 টি এন্ট্রি যুক্ত করতে পারি, তার পরে "নতুন যুক্ত করুন" বোতামটি দৃশ্যমান নয়, এটি সফটকিবোর্ডের নীচে লুকানো রয়েছে। "নতুন যুক্ত করুন" ক্লিক করতে আমাকে কীবোর্ডটি আড়াল করতে হবে এবং আরও এন্ট্রি যুক্ত করতে "নতুন যুক্ত করুন" বোতামটি ক্লিক করতে হবে। 12 এন্ট্রি পরে "অ্যাড নিউ" বোতামটি পর্দার নীচে সমাহিত করা হয়েছে! বৈধ এক্সএইচটিএমএল
উসমান

আমরা কীভাবে নতুন এডিটেক্সট অটোকে ফোকাস করতে পারি, কারণ এটি কেন্দ্রীভূত করতে আমাদের খালি জায়গায় ক্লিক করতে হবে। যেহেতু আমরা নতুন এডিটেক্সট যুক্ত করছি, যার অর্থ আমরা পাঠ্য যুক্ত করতে চাই, সুতরাং এটি স্বয়ংক্রিয়ভাবে ফোকাস করা উচিত এবং সফ্ট কীবোর্ডটি পপ-আপ হওয়া উচিত।
উসমান

9

এটি আমার সাধারণ উপায়:

View namebar = view.findViewById(R.id.namebar);
ViewGroup parent = (ViewGroup) namebar.getParent();
if (parent != null) {
    parent.removeView(namebar);
}

6

হাই আপনি আপেক্ষিক লেআউট যুক্ত করে এতে পাঠ্যদর্শন যুক্ত করার চেয়ে চেষ্টা করতে পারেন।

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            (LayoutParams.WRAP_CONTENT), (LayoutParams.WRAP_CONTENT));

RelativeLayout relative = new RelativeLayout(getApplicationContext());
relative.setLayoutParams(lp);

TextView tv = new TextView(getApplicationContext());
tv.setLayoutParams(lp);

EditText edittv = new EditText(getApplicationContext());
edittv.setLayoutParams(lp);

relative.addView(tv);
relative.addView(edittv);

এটি কি স্বয়ংক্রিয়ভাবে পুরো স্ক্রীনটি পুনরায় লোড না করে বিন্যাসে একটি নতুন দর্শন যুক্ত করবে? আপনি কীভাবে যোগাযোগগুলিতে একটি নতুন পাঠ্য ক্ষেত্র যুক্ত করবেন?
জোনাথন

1
আপনি যখন নতুন ভিউ যুক্ত করেন তখন অ্যান্ড্রয়েডকে পর্দা পুনরায় আঁকতে হয় (আমার মনে হয়)। তবে বেশিরভাগ ক্ষেত্রে এটি আপনাকে প্রভাবিত করবে না
ফলমারি

9
লিনিয়ারলআউট থেকে নির্দিষ্ট ভিউটি কীভাবে সরিয়ে নেওয়া যায় তার কোনও উদাহরণ?
জোনাথন

কীভাবে কোনও ভিউ অপসারণ করতে হবে তার উদাহরণ অন্তর্ভুক্ত না করার কারণে ডাউন ভোট দিয়েছে।
এজেপি

1
লিনিয়ারলআউট থেকে মতামত সরিয়ে দেওয়ার জন্য এটি আমিই করি। MyLinearLayoutThatHoldsOtherViews.removeAllViews (); সরানোআলভিউস () হল কী key আশা করি এটি সাহায্য করে এবং তা উপলব্ধি করে। ^। ^
মিকাহ মনটায়া

4

ভিউগ্রুপ ক্লাসটি রান-টাইমে চাইল্ড ভিউ ম্যানেজমেন্টের জন্য এপিআই সরবরাহ করে, সাথে সাথে ভিউগুলি যুক্ত / সরানোর অনুমতি দেয়।

বিষয়টিতে আরও কয়েকটি লিঙ্ক:

অ্যান্ড্রয়েড, এক্সএমএল লেআউট ব্যতীত নতুন দৃশ্য যুক্ত করুন

অ্যান্ড্রয়েড রানটাইম লেআউট টিউটোরিয়াল

http://developer.android.com/reference/android/view/View.html

http://developer.android.com/reference/android/widget/LinearLayout.html


ভিউগ্রুপ বা এর পদ্ধতিগুলি কোনও এপিআই সরবরাহ করে না (যা পরিবর্তে গ্রন্থাগারগুলির একটি সেট), তবে আপনি যে আচরণগুলি ব্যবহার করেন তা পরিচালনা করার জন্য কিছু পদ্ধতি (যেমন মতামত যুক্ত করা এবং অপসারণ করা) say এবং এই পদ্ধতিগুলি রানটাইমের সময় দেখা পরিচালনা করার জিনিস নয়, তবে সেগুলি পরিচালনা করার এক অনন্য উপায়। আপনি যখন একটি এক্সএমএল লেআউট লেখেন, এটি কেবল জাভাতে পার্স করা হয়েছে এবং রান-সময় চলাকালীন তার উপর ভিত্তি করে ভিউগুলি তৈরি করা হয়!
ডেভিড কান্নিজো

4

myView.setVisibility(View.GONE);এটি সম্পূর্ণরূপে অপসারণ করতে ব্যবহার করুন । তবে আপনি যদি দখলকৃত স্থানটিকে তার পিতামাতার ব্যবহারের অভ্যন্তরে সংরক্ষণ করতে চানmyView.setVisibility(View.INVISIBLE);


4
এটি কেবল লুকানো অপসারণ করছে না।
রুक्स

1
হ্যাঁ তবে দেখুন.গন সম্পূর্ণরূপে অপসারণের মতো কারণ সংরক্ষিত স্থান আর দেখায় না।
সোহেল সেতায়েশি

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

মনে রাখবেন না যে View.INVISIBLEশুধুমাত্র দর্শন লুকায়। OnClickListenerযদি তারা স্পর্শ (সেট করেন তাহলে) এখনও ব্যবহারকারী সাড়া দেবেন এলাকায় যেখানে দৃশ্য উপস্থিত (কিন্তু দৃশ্যমান নয়) হয়। সুতরাং আপনার আদর্শ OnClickListenersক্ষেত্রেও এই জাতীয় ক্ষেত্রে অপসারণ করা উচিত
কাঠির

4

বোতাম যুক্ত করার জন্য

LinearLayout dynamicview = (LinearLayout)findViewById(R.id.buttonlayout);
LinearLayout.LayoutParams  lprams = new LinearLayout.LayoutParams(  LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);

Button btn = new Button(this);
btn.setId(count);
final int id_ = btn.getId();
btn.setText("Capture Image" + id_);
btn.setTextColor(Color.WHITE);
btn.setBackgroundColor(Color.rgb(70, 80, 90));
dynamicview.addView(btn, lprams);
btn = ((Button) findViewById(id_));
btn.setOnClickListener(this);

বোতাম অপসারণ করার জন্য

ViewGroup layout = (ViewGroup) findViewById(R.id.buttonlayout);
View command = layout.findViewById(count);
layout.removeView(command);

গণনাটি গতিশীলভাবে তৈরি বোতামটির আইডি ছাড়া কিছুই নয়
অমরেশ জান

3

হাই প্রথম অ্যাক্টিভিটি ক্লাস লিখুন। নিম্নলিখিত শ্রেণিতে শ্রেণীর একটি নাম এবং ছোট অ্যাড বোতাম রয়েছে। আপনি অ্যাড (+) বোতাম টিপলে এটি নতুন সারি যুক্ত করে যার মধ্যে একটি সম্পাদনা পাঠ এবং একটি ইমেজবটন রয়েছে যা সারিটি মোছার কাজ করে।

package com.blmsr.manager;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

import com.blmsr.manager.R;
import com.blmsr.manager.dao.CategoryService;
import com.blmsr.manager.models.CategoryModel;
import com.blmsr.manager.service.DatabaseService;

public class CategoryEditorActivity extends Activity {
    private final String CLASSNAME = "CategoryEditorActivity";
    LinearLayout itsLinearLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_category_editor);

        itsLinearLayout = (LinearLayout)findViewById(R.id.linearLayout2);
    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_category_editor, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    switch (item.getItemId()) {
        case R.id.action_delete:
            deleteCategory();
            return true;
        case R.id.action_save:
            saveCategory();
            return true;
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

/**
 * Adds a new row which contains the EditText and a delete button.
 * @param theView
 */
public void addField(View theView)
{
    itsLinearLayout.addView(tableLayout(), itsLinearLayout.getChildCount()-1);
}

// Using a TableLayout as it provides you with a neat ordering structure

private TableLayout tableLayout() {
    TableLayout tableLayout = new TableLayout(this);
    tableLayout.addView(createRowView());
    return tableLayout;
}

private TableRow createRowView() {
    TableRow tableRow = new TableRow(this);
    tableRow.setPadding(0, 10, 0, 0);

    EditText editText = new EditText(this);
    editText.setWidth(600);
    editText.requestFocus();

    tableRow.addView(editText);
    ImageButton btnGreen = new ImageButton(this);
    btnGreen.setImageResource(R.drawable.ic_delete);
    btnGreen.setBackgroundColor(Color.TRANSPARENT);
    btnGreen.setOnClickListener(anImageButtonListener);
    tableRow.addView(btnGreen);

    return tableRow;
}

/**
 * Delete the row when clicked on the remove button.
 */
private View.OnClickListener anImageButtonListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        TableRow anTableRow = (TableRow)v.getParent();
        TableLayout anTable = (TableLayout) anTableRow.getParent();
        itsLinearLayout.removeView(anTable);

    }
};

/**
 * Save the values to db.
 */
private void saveCategory()
{
    CategoryService aCategoryService = DatabaseService.getInstance(this).getCategoryService();
    aCategoryService.save(getModel());
    Log.d(CLASSNAME, "successfully saved model");

    Intent anIntent = new Intent(this, CategoriesListActivity.class);
    startActivity(anIntent);

}

/**
 * performs the delete.
 */
private void deleteCategory()
{

}

/**
 * Returns the model object. It gets the values from the EditText views and sets to the model.
 * @return
 */
private CategoryModel getModel()
{
    CategoryModel aCategoryModel = new CategoryModel();
    try
    {
        EditText anCategoryNameEditText = (EditText) findViewById(R.id.categoryNameEditText);
        aCategoryModel.setCategoryName(anCategoryNameEditText.getText().toString());
        for(int i= 0; i< itsLinearLayout.getChildCount(); i++)
        {
            View aTableLayOutView = itsLinearLayout.getChildAt(i);
            if(aTableLayOutView instanceof  TableLayout)
            {
                for(int j= 0; j< ((TableLayout) aTableLayOutView).getChildCount() ; j++ );
                {
                    TableRow anTableRow = (TableRow) ((TableLayout) aTableLayOutView).getChildAt(i);
                    EditText anEditText =  (EditText) anTableRow.getChildAt(0);
                    if(StringUtils.isNullOrEmpty(anEditText.getText().toString()))
                    {
                        // show a validation message.
                        //return aCategoryModel;
                    }

                    setValuesToModel(aCategoryModel, i + 1, anEditText.getText().toString());
                }
            }
        }
    }
    catch (Exception anException)
    {
        Log.d(CLASSNAME, "Exception occured"+anException);
    }

    return aCategoryModel;
}

/**
 * Sets the value to model.
 * @param theModel
 * @param theFieldIndexNumber
 * @param theFieldValue
 */
private void setValuesToModel(CategoryModel theModel, int theFieldIndexNumber, String theFieldValue)
{
    switch (theFieldIndexNumber)
    {
        case 1 :
            theModel.setField1(theFieldValue);
            break;
        case 2 :
            theModel.setField2(theFieldValue);
            break;
        case 3 :
            theModel.setField3(theFieldValue);
            break;
        case 4 :
            theModel.setField4(theFieldValue);
            break;
        case 5 :
            theModel.setField5(theFieldValue);
            break;
        case 6 :
            theModel.setField6(theFieldValue);
            break;
        case 7 :
            theModel.setField7(theFieldValue);
            break;
        case 8 :
            theModel.setField8(theFieldValue);
            break;
        case 9 :
            theModel.setField9(theFieldValue);
            break;
        case 10 :
            theModel.setField10(theFieldValue);
            break;
        case 11 :
            theModel.setField11(theFieldValue);
            break;
        case 12 :
            theModel.setField12(theFieldValue);
            break;
        case 13 :
            theModel.setField13(theFieldValue);
            break;
        case 14 :
            theModel.setField14(theFieldValue);
            break;
        case 15 :
            theModel.setField15(theFieldValue);
            break;
    }
}
}

2. নিচের মত লেআউট xML লিখুন।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#006699"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.blmsr.manager.CategoryEditorActivity">

<LinearLayout
    android:id="@+id/addCategiryNameItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/categoryNameTextView"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="@string/lbl_category_name"
        android:textStyle="bold"
        />

    <TextView
        android:id="@+id/categoryIconName"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="@string/lbl_category_icon_name"
        android:textStyle="bold"
        />

</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
        android:id="@+id/categoryNameEditText"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:hint="@string/lbl_category_name"
        android:inputType="textAutoComplete" />


    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        <LinearLayout
            android:id="@+id/linearLayout3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            </LinearLayout>

            <ImageButton
                android:id="@+id/addField"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_below="@+id/addCategoryLayout"
                android:src="@drawable/ic_input_add"
                android:onClick="addField"
                />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

  1. একবার আপনি শেষ করার পরে নিচের মত প্রদর্শিত হবে এখানে চিত্র বর্ণনা লিখুন

0
//MainActivity :





 package com.edittext.demo;
    import android.app.Activity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.Toast;

    public class MainActivity extends Activity {

        private EditText edtText;
        private LinearLayout LinearMain;
        private Button btnAdd, btnClear;
        private int no;

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

            edtText = (EditText)findViewById(R.id.edtMain);
            btnAdd = (Button)findViewById(R.id.btnAdd);
            btnClear = (Button)findViewById(R.id.btnClear);
            LinearMain = (LinearLayout)findViewById(R.id.LinearMain);

            btnAdd.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (!TextUtils.isEmpty(edtText.getText().toString().trim())) {
                        no = Integer.parseInt(edtText.getText().toString());
                        CreateEdittext();
                    }else {
                        Toast.makeText(MainActivity.this, "Please entere value", Toast.LENGTH_SHORT).show();
                    }
                }
            });

            btnClear.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    LinearMain.removeAllViews();
                    edtText.setText("");
                }
            });

            /*edtText.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,int after) {
                }
                @Override
                public void afterTextChanged(Editable s) {
                }
            });*/

        }

        protected void CreateEdittext() {
            final EditText[] text = new EditText[no];
            final Button[] add = new Button[no];
            final LinearLayout[] LinearChild = new LinearLayout[no];
            LinearMain.removeAllViews();

            for (int i = 0; i < no; i++){

                View view = getLayoutInflater().inflate(R.layout.edit_text, LinearMain,false);
                text[i] = (EditText)view.findViewById(R.id.edtText);
                text[i].setId(i);
                text[i].setTag(""+i);

                add[i] = (Button)view.findViewById(R.id.btnAdd);
                add[i].setId(i);
                add[i].setTag(""+i);

                LinearChild[i] = (LinearLayout)view.findViewById(R.id.child_linear);
                LinearChild[i].setId(i);
                LinearChild[i].setTag(""+i);

                LinearMain.addView(view);

                add[i].setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        //Toast.makeText(MainActivity.this, "add text "+v.getTag(), Toast.LENGTH_SHORT).show();
                        int a = Integer.parseInt(text[v.getId()].getText().toString());
                        LinearChild[v.getId()].removeAllViews();
                        for (int k = 0; k < a; k++){

                            EditText text = (EditText) new EditText(MainActivity.this);
                            text.setId(k);
                            text.setTag(""+k);

                            LinearChild[v.getId()].addView(text);
                        }
                    }
                });
            }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

    }

// এবার এক্সএমএল মেইন যুক্ত করুন

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/edtMain"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_weight="1"
        android:ems="10"
        android:hint="Enter value" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Add" />

    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:text="Clear" />
</LinearLayout>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dp" >

    <LinearLayout
        android:id="@+id/LinearMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>
</ScrollView>

// এখন দেখুন এক্সএমএল ফাইল যুক্ত করুন ..

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/edtText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:ems="10" />

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Add" />
</LinearLayout>

<LinearLayout
    android:id="@+id/child_linear"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="5dp"
    android:orientation="vertical" >
</LinearLayout>


0

কোটলিন এক্সটেনশন সলিউশন

যোগ removeSelfসরাসরি একটি দৃশ্য কল করতে। যদি কোনও পিতামাতার সাথে সংযুক্ত থাকে তবে তা সরিয়ে ফেলা হবে। এটি আপনার কোডটিকে আরও ঘোষিত এবং এইভাবে পাঠযোগ্য।

myView.removeSelf()

fun View?.removeSelf() {
    this ?: return
    val parent = parent as? ViewGroup ?: return
    parent.removeView(this)
}

প্রোগ্রামটিতে কোনও ভিটিতে কীভাবে যুক্ত করা যায় তার জন্য এখানে 3 টি বিকল্প রয়েছে ViewGroup

// Built-in
myViewGroup.addView(myView)

// Reverse addition
myView.addTo(myViewGroup)

fun View?.addTo(parent: ViewGroup?) {
    this ?: return
    parent ?: return
    parent.addView(this)
}

// Null-safe extension
fun ViewGroup?.addView(view: View?) {
    this ?: return
    view ?: return
    addView(view)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.