Android - выдаленне макета праграмна

У мяне ёсць актыўнасць, што робіць макет праграмна з агульнымі пераваг, выкарыстоўваючы для цыклу. Тэкставыя прадстаўлення і кнопкі заключаны ў лінейнай кампаноўцы. Ўводу элемент можа як шмат пунктаў гледжання, як ён хоча. Цяпер кнопка будзе кнопка выдалення. Пры націску на кнопку, я хачу выдаліць лінейным размяшчэнне кнопак і іншых TextViews ўтрымліваюцца. Як мне гэта зрабіць?

Вось мой код:

package com.dirkjan.myschools;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

LinearLayout subjectLeft, subjectRight;

Button addSubj;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    subjectLeft = (LinearLayout) findViewById(R.id.llSubjectLeft);
    subjectRight = (LinearLayout) findViewById(R.id.llSubjectRight);

    //Load the saved subjects
    SharedPreferences getSubjects = getSharedPreferences("SubjectInfo_Prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = getSubjects.edit();

    int subjectCount = getSubjects.getInt("count", 0);
    if (subjectCount > 0 ){
        for (int i = 1; i <= subjectCount; i++){
            //Set the linear layout for each subject
            LinearLayout ll = new LinearLayout(this);
            ll.setOrientation(LinearLayout.VERTICAL);
            LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

            float scale = getResources().getDisplayMetrics().density;
            //SET BOTTOM MARGIN
            float margin = 5; //RESIZE MARGIN HERE!
            int margs = (int) (margin * scale + 0.5f);

            //SET PADDING IN DP
            float padding = 5; //RESIZE PADDING HERE!
            int pads = (int) (padding * scale +0.5f);
            llParams.setMargins(0,0,0,margs);

            //SETTING THE LINEARLAYOUT PARAMS
            ll.setLayoutParams(llParams);
            ll.setPadding(pads, pads, pads, pads);

            //SETTING THE BACKGROUND COLOR OF THE LINEAR LAYOUT
            String chosenColor = getSubjects.getString("chosenColor" + i, "BLUE");

            if (chosenColor.equals("Green")){
                ll.setBackgroundResource(R.color.HoloGreen);
            }else if (chosenColor.equals("Blue")){
                ll.setBackgroundResource(R.color.HoloBlue);
            }else if (chosenColor.equals("Gray")){
                ll.setBackgroundResource(R.color.HoloGray);
            }else if (chosenColor.equals("Orange")){
                ll.setBackgroundResource(R.color.HoloOrange);
            }else {
                ll.setBackgroundResource(R.color.HoloYellow);
            }

            //ADDING THE LAYOUT TO THE APPROPRIATE CONTAINER (LEFT OR RIGHT)
            if (i % 2 == 1){
                subjectLeft.addView(ll);
            } else {
                subjectRight.addView(ll);
            }

            //SETTING THE SUBJECT NAME TEXTVIEW
            TextView SubjectName = new TextView(this);
            SubjectName.setText(getSubjects.getString("subjectName" + i, "Error"));
            SubjectName.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            SubjectName.setTextSize(22);
            SubjectName.setTypeface(Typeface.DEFAULT_BOLD);

            //SETTING THE SUBJECT NUMB TEXT VIEW
            TextView SubjectNumber = new TextView(this);
            SubjectNumber.setText(getSubjects.getString("subjectNumb" + i, "Error"));
            SubjectNumber.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            SubjectNumber.setTextSize(16);

            //Creating the divider line
            ImageView divider = new ImageView(this);
            LinearLayout.LayoutParams dividerParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 2);
            divider.setLayoutParams(dividerParams);
            divider.setBackgroundResource(R.color.Black);

            //Add Views into the Layout
            ll.addView(SubjectNumber);
            ll.addView(SubjectName);
            ll.addView(divider);
        }



    }

    addSubj = (Button) findViewById(R.id.buttonPlusSubject);
    addSubj.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
           //TODO Auto-generated method stub
            Intent toAddSubj = new Intent(MainActivity.this,
                    AddSubjectActivity.class);
            startActivity(toAddSubj);
            finish();
        }
    });
}






@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;
}

}

Калі ласка, звярніце ўвагу, што няма ідэнтыфікатара не назначаюцца для кожнага макета. Было б карысна, калі ёсць код для ідэнтыфікацыі з бацькоў з бацькоў кнопкі (кнопка знаходзіцца ў адноснай макеце, які знаходзіцца ў лінейнай кампаноўцы, дзе лінейная кампаноўка павінна быць выдаленая, націснуўшы на кнопку.

5
ваш код, калі ласка ...
дададзена аўтар Oam, крыніца
<�Код> Кнопка знаходзіцца ў адноснай макеце, які знаходзіцца ў лінейнай кампаноўцы, дзе лінейная кампаноўка павінна быць выдаленая, націснуўшы кнопку так што вы хочаце, каб выдаліць бацькоўскі макет, націснуўшы на выглядзе дзіцяці? Тады як наконт дзяцей выгляду гэтага бацькоўскага макета?
дададзена аўтар Oam, крыніца
размяшчаць некаторыя адпаведны код.
дададзена аўтар TheFlash, крыніца
Усе яны будуць выдаленыя разам з бацькоўскім макеце.
дададзена аўтар DirkJan, крыніца

6 адказы

Спачатку знайдзіце свой бацькоўскі фармат, выкарыстоўваючы

ll = (LinearLayout) findViewById(R.id.main_linearlayout);

атрымаць размяшчэнне дзіцяці з дапамогай

final LinearLayout child = (LinearLayout) ll.findViewById(count);

Зараз, каб выдаліць ўвесь макет можна выкарыстоўваць removeview() метад, як паказана ніжэй

ll.removeView(child);

толькі выдаліць усе віды з канкрэтнага макета (тут, напрыклад, для дзіцяці.), вы можаце выкарыстоўваць

child.removeAllViews();
15
дададзена
вы можаце атрымаць не з Чайлдс ў partucular макеце з дапамогай ll.getChildCount() ;
дададзена аўтар Karan Mer, крыніца
Што такое лічыльнік тут?
дададзена аўтар shadygoneinsane, крыніца
Я не назначце ідэнтыфікатар для дзіцяці Я хачу, каб выдаліць. Як я магу зрабіць гэта без неабходнасці прызначыць ідэнтыфікатар для кожнага макета, так як гэта павінна быць зроблена праграмна?
дададзена аўтар DirkJan, крыніца

Спачатку знайдзіце свой бацькоўскі фармат, выкарыстоўваючы

ll = (LinearLayout) findViewById(R.id.main_linearlayout);

атрымаць размяшчэнне дзіцяці з дапамогай

final LinearLayout child = (LinearLayout) ll.findViewById(count);

Зараз, каб выдаліць ўвесь макет можна выкарыстоўваць removeview() метад, як паказана ніжэй

ll.removeView(child);

толькі выдаліць усе віды з канкрэтнага макета (тут, напрыклад, для дзіцяці.), вы можаце выкарыстоўваць

child.removeAllViews();
15
дададзена
вы можаце атрымаць не з Чайлдс ў partucular макеце з дапамогай ll.getChildCount() ;
дададзена аўтар Karan Mer, крыніца
Што такое лічыльнік тут?
дададзена аўтар shadygoneinsane, крыніца
Я не назначце ідэнтыфікатар для дзіцяці Я хачу, каб выдаліць. Як я магу зрабіць гэта без неабходнасці прызначыць ідэнтыфікатар для кожнага макета, так як гэта павінна быць зроблена праграмна?
дададзена аўтар DirkJan, крыніца

Вы можаце выклікаць view.setVisiblility (View.GONE) , калі вы хочаце, каб выдаліць яго з макета, або view.setVisibility (View.INVISIBLE) , калі вы проста хочаце, каб схаваць гэта.

13
дададзена
вялікі пункт, тэхніка яго падводзіць апавяшчэнне
дададзена аўтар Emad, крыніца

Вы можаце выклікаць view.setVisiblility (View.GONE) , калі вы хочаце, каб выдаліць яго з макета, або view.setVisibility (View.INVISIBLE) , калі вы проста хочаце, каб схаваць гэта.

13
дададзена
вялікі пункт, тэхніка яго падводзіць апавяшчэнне
дададзена аўтар Emad, крыніца

Выказаўшы здагадку, што ваш LinearLayout ідэнтыфікатар my_linear_layout, проста зрабіць гэта ў onClickListener:

 findViewById(R.id.my_linear_layout).setVisibility(View.GONE);

У вашым XML, не забудзьцеся паставіць ID:

 
 
4
дададзена
Файлы xml не патрэбныя, я думаю. Паколькі макеты ствараюцца праграмна. Інфармацыя на макет і TextView захоўваюцца і здабываюцца з агульнай Preference.
дададзена аўтар DirkJan, крыніца
Тое, што я маю на ўвазе, ёсць шмат лінейных макетаў. І ў кожнай лінейнай кампаноўцы, ёсць адноснае размяшчэнне, дзе кнопка ўтрымліваюцца. І няма Ідэнтыфікатар, прысвоены на макетах, уяўленняў і кнопак. Як ўсталюе onCLickListener() ?
дададзена аўтар DirkJan, крыніца
Як прыкладанне ведае, што ЛЛ з'яўляецца бацькоўскім размяшчэннем, дзе кнопка змяшчаецца?
дададзена аўтар DirkJan, крыніца
Там няма ідэнтыфікатара, прысвоенага лінейнай кампаноўцы, так як раскладка дадаецца праграмна.
дададзена аўтар DirkJan, крыніца
У гэтым выпадку, вы можаце адразу зрабіць ll.setVisibility (View.GONE);
дададзена аўтар Christophe Longeanie, крыніца
Метад прымяняецца да LinearLayout і ўсіх яго дзяцей.
дададзена аўтар Christophe Longeanie, крыніца
Разумею. Ваша праблема з'яўляецца больш складанай, чым я спачатку падумаў. Можа быць, вы можаце пакласці вашыя LinearLayouts ў спіс (ArrayList, напрыклад). Тады я думаю, вы будзеце мець магчымасць атрымаць яго ад кнопкі. Не маглі б вы апублікаваць код вашых двух файлаў XML, калі ласка?
дададзена аўтар Christophe Longeanie, крыніца

Па-першае, калі ласка, напішыце свой код ...

Вы можаце выдаліць дзіця Від з бацькоў па тэлефоне removeView (View выгляд), напрыклад, як гэта:

parent.removeView(child);

Спадзяюся, што гэта дапамагае ^^

3
дададзена
Так, але як я выдаліць яго без ідэнтыфікатара, прызначанага для ўсяго. Макеты і прадстаўлення ствараюцца праграмна.
дададзена аўтар DirkJan, крыніца