2017-01-09 3 views
1

В моем основной деятельности коды Java файл, я добавляю новый вид с помощью этого метода:удаления вида из деятельности

public void AddNewView(View view) { 
    Intent intent = new Intent(this, DisplayNewView.class); 
    startActivity(intent); 
} 

Это использует класс, называемый DisplayNewView, который имеет этот метод:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    TableLayout.LayoutParams tlp = new TableLayout.LayoutParams(
      TableLayout.LayoutParams.WRAP_CONTENT, 
      TableLayout.LayoutParams.WRAP_CONTENT); 

    LayoutInflater inflater = getLayoutInflater(); 
    View view; 
    view = inflater.inflate(R.layout.activity_display_view, null); 
    TextView tv = (TextView) view.findViewById(R.id.myViewLabel); 
    tv.setTextSize(40); 

    addContentView(view,tlp); 

} 

Таким образом, это успешно добавляет представление.

Но теперь, в том же файле ресурсов xml, что и в этом представлении, у меня есть кнопка, которая должна удалить это представление. Эта кнопка также находится в одном и том же файле кода Java DisplayNewView.

Это выглядит следующим образом:

public void removeView(View view) { 
    ViewGroup vg = (ViewGroup)(view.getParent()); 
    vg.removeView(view); 
} 

Но когда я нажимаю на кнопку, ничего не происходит. Я также не вижу ошибок в консоли отладчика в Android Studio.

Из поиска в Интернете, похоже, я пытаюсь удалить представление в правильном направлении.

Есть ли что-нибудь, что мне не хватает?

Спасибо!

+1

Мне кажется, что «вид», на который вы ссылаетесь, на самом деле является активностью, вы можете просто называть «финиш», чтобы убрать «DisplayNewView» – WenChao

+1

. Похоже на проблему XY [1]. Чего вы пытаетесь достичь? Почему вы используете для этого намерение? Иначе код removeView действительно должен работать. Вызывается? Попробуйте установить там точку останова или просто Log.d(). [1] http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – domenukk

+0

@domenukk Я просто пытался изменить учебник, над которым я работал. У них была кнопка для добавления представления, но не для его удаления. Поэтому я пытался закодировать кнопку, которая удалит представление. – SkyeBoniwell

ответ

2

Я воссоздал вашу проблему, и я не вижу ошибок в представленном коде. Из того, что я понимаю, что вы должны иметь что-то похожее на это:

public class MainActivity extends AppCompatActivity { 

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

     Button buttonadd = (Button) findViewById(R.id.addButton); 

     buttonadd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       AddNewView(view); 
      } 
     }); 
    } 

    public void AddNewView(View view) { 
     Intent intent = new Intent(this, DisplayNewView.class); 
     startActivity(intent); 
    } 
} 


public class DisplayNewView extends AppCompatActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     TableLayout.LayoutParams tlp = new TableLayout.LayoutParams(
       TableLayout.LayoutParams.WRAP_CONTENT, 
       TableLayout.LayoutParams.WRAP_CONTENT); 

     LayoutInflater inflater = getLayoutInflater(); 
     View view; 
     view = inflater.inflate(R.layout.activity_display_view, null); 
     TextView tv = (TextView) view.findViewById(R.id.myViewLabel); 
     tv.setTextSize(40); 

     Button buttondelete = (Button) view.findViewById(R.id.deleteButton); 
     buttondelete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       removeView(view); 
      } 
     }); 

     addContentView(view, tlp); 

    } 

    public void removeView(View view) { 
     ViewGroup vg = (ViewGroup) (view.getParent()); 
     vg.removeView(view); 
    } 
} 


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    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.stackquest.MainActivity"> 

    <Button 
     android:id="@+id/addButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add"> 
    </Button> 
</LinearLayout> 


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_display_new_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    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.stackquest.DisplayNewView"> 


    <TextView 
     android:id="@+id/myViewLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <Button 
     android:id="@+id/deleteButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Delete"> 
    </Button> 
</LinearLayout> 

Кли Кнопка cking on delete должна удалить вид кнопки. Если вы хотите удалить все виды, вы можете использовать vg.removeAllViews(); и, как говорили другие, зачем создавать новые намерения для динамического управления представлениями?

+0

Я пробовал свой код. Когда я нажимаю кнопку «Удалить», она удаляет эту кнопку, но не весь вид. – SkyeBoniwell

+0

Использование removeAllViews удаляет все представления, даже родительские. Я просто хочу удалить ребенка. Благодаря! – SkyeBoniwell

+1

Если вы хотите удалить другой вид, вы должны найти его только по id: 'public void removeView (View view) { Просмотреть myView = findViewById (R.id.myViewLabel); ViewGroup vg = (ViewGroup) (view.getParent()); vg.removeView (myView); } ' – Sabriael

Смежные вопросы