लेआउट से दृश्य जोड़ें और हटाएं


94

मैं किसी लेआउट से दृश्य कैसे जोड़ या हटा सकता हूं?


किस तरह का लेआउट? क्या आप उस कोड का हिस्सा पेस्ट कर सकते हैं जिस पर आप काम कर रहे हैं?
क्रिश्चियन

3
यह अच्छी तरह से कैसे तैयार किया जाता है?
कॉर्नेलियस

जवाबों:


219

मैंने ऐसा किया है:

((ViewManager)entry.getParent()).removeView(entry);

44
नए एसडीके में इसका (ViewGroup):)
रॉन

@ schwiz हम इस मामले में दृश्य आईडी को कैसे रीसेट कर सकते हैं। मेरी समस्या तब भी है जब मेरी गतिविधि समाप्त हो जाती है जब भी अगला दृश्य जोड़ा जाता है तो दृश्य वृद्धि हो जाती है। मैं चाहता हूं कि जब भी मैं इस गतिविधि पर वापस जाऊं तो दृश्य आईडी डिफ़ॉल्ट 1 हो जाए ।
AndroidNewBee 12

धन्यवाद एक लॉट के लिए यह जवाब दिया
हेम

ViewGroup विस्तार लागू करता है ViewParent, ViewManager। इसे देखने के लिए कॉल करने के लिए अच्छे (ViewGroup)
बुध

23

ViewStub का उपयोग करें और उस दृश्य का लेआउट निर्दिष्ट करें जिसे आप टॉगल करना चाहते हैं। देखने के लिए:

mViewStub.setVisibility(View.VISIBLE) or mViewStub.inflate();

लुप्त होना:

mViewStub.setVisibility(View.GONE);

40
छिपाना, हटाने के समान नहीं है।
21:39 पर डार्क वाटर

यदि आप छिपाना / अनहाइड करना चाहते हैं तो आप .setVisibility (View.INVISIBLE) और .setVisibility (View.VISIBLE) का उपयोग कर सकते हैं। जब दृश्य अदृश्य होता है तो उपयोगकर्ता उसके साथ सहभागिता नहीं कर सकता है।
dennisschagt

मान लीजिए कि मेरे पास एक टेक्स्ट दृश्य है जिसके साथ एक onClickListener जुड़ा हुआ है। यदि मैं इसे गायब कर देता हूं और फिर मैं उस पर टैप करता हूं, तो क्या घटना अभी भी आग लग जाएगी?
आहिट ६३४५

22

यह सबसे अच्छा तरीका है

LinearLayout lp = new LinearLayout(this);
lp.addView(new Button(this));
lp.addView(new ImageButton(this));
// Now remove them 
lp.removeViewAt(0); // and so on

यदि आपके पास xml लेआउट है, तो डायनामिक रूप से कॉल करने की आवश्यकता नहीं है

lp.removeViewAt(0);

प्रदर्शन के मामले में क्या अंतर होगा? मेरा मतलब है कि प्रदर्शन उन्हें गतिशील रूप से जोड़ने या उन्हें एक स्थिर एक्सएमएल लेआउट फाइल में डालने और इसे फुलाए जाने का है?
stdout

19

किसी लेआउट में दृश्य जोड़ने के लिए, आप कक्षा addViewकी विधि का उपयोग कर सकते हैं ViewGroup। उदाहरण के लिए,

TextView view = new TextView(getActivity());
view.setText("Hello World");

ViewGroup Layout = (LinearLayout) getActivity().findViewById(R.id.my_layout);
layout.addView(view); 

हटाने के कई तरीके भी हैं। ViewGroup के प्रलेखन की जाँच करें । लेआउट से दृश्य हटाने का एक सरल तरीका हो सकता है,

layout.removeAllViews(); // then you will end up having a clean fresh layout

4
removeAllViews () वही है जो मैं ढूंढ रहा था!
एलन

6

दृश्यता बदलने के लिए:

predictbtn.setVisibility(View.INVISIBLE);

हटाने के लिए:

predictbtn.setVisibility(View.GONE);

इसने मेरी समस्या को ठीक कर दिया, हर दूसरे जवाब से ज्यादा। यदि मेरी तरह उपयोगी हो, तो आपकी पृष्ठभूमि या कुछ परिमाण दृश्य पूरी तरह से गायब होने से रोकते हैं।
विराट

1
ऐसा इसलिए है क्योंकि View.GONE लेआउट के लिए दृश्य को हटा नहीं है, केवल इसे अदृश्य बनाते हैं, और यह लेआउट उद्देश्यों के लिए कोई स्थान नहीं लेता है।
विक्टर

6

समीर और हाबिल तेरेफ़ से महान अन्वेषक। हालाँकि, जब आप किसी दृश्य को हटाते हैं, तो मेरे विकल्प में, आप कुछ विशेष आईडी के साथ एक दृश्य हटाना चाहते हैं। यहाँ है कि तुम कैसे करते हो।

1, जब आप इसे बनाते हैं, तो उसे एक आईडी दें:

_textView.setId(index);

2, आईडी के साथ दृश्य को हटा दें:

removeView(findViewById(index));

1

आप addView या removeView का उपयोग कर सकते हैं

जावा:

// Root Layout
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setOrientation(LinearLayout.VERTICAL);

// TextView
TextView textView = new TextView(context);
textView.setText("Sample");

// Add TextView in LinearLayout
linearLayout.addView(textView);

// Remove TextView from LinearLayout
linearLayout.removeView(textView);

kotlin:

// Root Layout
val linearLayout = LinearLayout(context)
linearLayout.gravity = Gravity.CENTER
linearLayout.orientation = LinearLayout.VERTICAL

// TextView
val textView = TextView(context)
textView.text = "Sample"

// Add TextView in LinearLayout
linearLayout.addView(textView)

// Remove TextView from LinearLayout
linearLayout.removeView(textView)

0

hi यदि आप android में नए हैं तो इस तरह से अपना प्रयोग करें इसे चला गया बनाने के लिए अपना दृष्टिकोण लागू करें, एक और तरीका है, माता-पिता के दृष्टिकोण को पकड़ें, और बच्चे को वहाँ से हटा दें ..... और अभिभावक लेआउट प्राप्त करें और इसका उपयोग करें पद्धति सभी बच्चे को हटाएं

मेरा सुझाव है कि GONE दृष्टिकोण का उपयोग कर ...


1
प्रभावी रूप से दृश्य को छिपाया जाएगा, लेकिन यह इसे लेआउट से नहीं हटाएगा
सबाबादो

1
पैरेंट व्यू का सरल उपयोग करें। रिमूव (रिमूव व्यू नेम);
ज़ला जनकसिंह

आप इसके बारे में सही हैं, लेकिन मैं संकेत देना चाह रहा था कि आप "GONE" समाधान प्रदान करके इस प्रश्न का उत्तर नहीं दे रहे थे।
सबाबादो

0

मैं प्रारंभ और गणना पद्धति का उपयोग करके दृश्य निकाल रहा हूं, मैंने रैखिक लेआउट में 3 दृश्य जोड़े हैं।

view.removeViews (0, 3);


0

कोटलिन पुन: प्रयोज्य विस्तार समाधान

हटाने को सरल बनाएं

इस एक्सटेंशन को जोड़ें:

myView.removeSelf()

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

इसके अलावा सरलीकरण करें

यहाँ कुछ विकल्प दिए गए हैं:

// Built-in
myViewGroup.addView(myView)

// Null-safe extension
fun ViewGroup?.addView(view: View?) {
    this ?: return
    view ?: return
    addView(view)
}

// Reverse addition
myView.addTo(myViewGroup)

fun View?.addTo(parent: ViewGroup?) {
    this ?: return
    parent ?: return
    parent.addView(this)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.