2015-08-28 3 views
-1

Хорошо, я пытаюсь сделать что-то вроде функции поиска тегов. То, что я сделал, это создать Button ArrayList, и всякий раз, когда пользователь пытается ввести «,», он автоматически создает кнопку и вставляет ее в ArrayList, который в конечном счете регистрируется в LinearLayout.удалить динамически созданную кнопку android

Он хорошо работает, но не удаляет хорошо. Я получаю ошибку, что индекс за пределами границ, но не посчастливилось выяснить, какое утверждение я должен использовать. Не могли бы вы помочь мне? Thx заранее.

public class MainActivity extends AppCompatActivity { 

private ArrayList<Button> tagCollection = null; 
private LinearLayout llTagCollection = null; 

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

    tagCollection = new ArrayList<Button>(); 
    initView(); 
} 

@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_main, 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. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

public void initView() { 
    final EditText etSearch = (EditText) findViewById(R.id.ET_SEARCH); 
    // final TextView tvResult = (TextView) findViewById(R.id.TV_RESULT); 
    llTagCollection = (LinearLayout) findViewById(R.id.LL_BUTTON_COLLECTION); 


    View currentView = new View(getApplicationContext()); 
    /* 
    if(tagCollection.size() != 0) { 
     tagCollection.get(currentView.getId()).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       tagCollection.remove(tagCollection.get(v.getId())); 
       Log.e("Removed", String.valueOf(tagCollection.remove(tagCollection.get(v.getId())))); 
       // tagCollection.remove(this); 
       llTagCollection.removeAllViews(); 
       int i = 0; 
       while (i < (tagCollection.size())) { 
        llTagCollection.addView(tagCollection.get(i)); 
        i += 1; 
       } 
      } 
     }); 
    } 
    */ 

    TextWatcher tagWatcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

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

      String convertedCharSequence = s.toString(); 
      Log.e("ConvertedString", convertedCharSequence); 
      if (convertedCharSequence.length() > 0) { 
       String subString = convertedCharSequence.substring(convertedCharSequence.length() - 1); 
       Log.e("SubStringPosition", subString); 

       if (subString.equals(",")) { 
        // tvResult.setText(etSearch.getText().toString()); 
        Button bTagButton = new Button(MainActivity.this); 
        bTagButton.setId(tagCollection.size()); 
        bTagButton.setText(etSearch.getText().toString()); 
        bTagButton.setBackgroundColor(Color.WHITE); 
        bTagButton.setTextColor(Color.BLACK); 
        /* 
        RelativeLayout.LayoutParams rlLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

        if(tagCollection.size() != 0){ 
         rlLayoutParams.addRule(RelativeLayout.END_OF, tagCollection.get(0).getId()); 
        } 
        bTagButton.setLayoutParams(rlLayoutParams); 
        */ 

        bTagButton.setOnClickListener(new View.OnClickListener(){ 
         @Override 
         public void onClick(View v) { 
          tagCollection.remove(tagCollection.indexOf(this)); 

          llTagCollection.removeAllViews(); 
          int i = 0; 
          while (i < (tagCollection.size())) { 
           if(tagCollection.get(i) != null){ 
            llTagCollection.addView(tagCollection.get(i)); 
           } 

           i += 1; 
          } 
         } 
        }); 


        tagCollection.add(bTagButton); 

        llTagCollection.removeAllViews(); 
        int i = 0; 
        while (i < (tagCollection.size())) { 
         llTagCollection.addView(tagCollection.get(i)); 
         i += 1; 
        } 
        // setContentView(rlTagCollection); 
        etSearch.setText(""); 
        etSearch.setSelection(0); 
       } 

      } 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }; 
    etSearch.addTextChangedListener(tagWatcher); 
} 

}

+0

link output logger –

+0

Я решил использовать его с помощью функции indexOfChild. Он продолжал бросать мне ошибку indexOutOfBounds. Thx – DevMGL

+0

@DevMGL: Вы должны опубликовать это как ответ и принять его, чтобы другие могли видеть, что ваша проблема решена, тем более, что вы решили ее самостоятельно. –

ответ

0

Я решил его с помощью функции indexOfChild. Он продолжал бросать мне ошибку indexOutOfBounds. Thx

0

Из-за репутации, я не могу добавить комментарий. Итак, я публикую здесь.

В кнопку мыши слушателю:

bTagButton.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          tagCollection.remove(tagCollection.indexOf(this)); 

          llTagCollection.removeAllViews(); 
          int i = 0; 
          while (i < (tagCollection.size())) { 
           if (tagCollection.get(i) != null) { 
            llTagCollection.addView(tagCollection.get(i)); 
           } 

           i += 1; 
          } 
         } 
        }); 

Вы удаляете кнопку на tagCollection.remove(tagCollection.indexOf(this));. Здесь this означает экземпляр OnClickListener, а не кнопку. SO вы должны удалить кнопки:

tagCollection.remove(tagCollection.indexOf(v)); 
Смежные вопросы