2015-12-28 2 views
0

У меня есть адаптер курсора, и я хочу отображать кнопку и TextView только в том случае, если значение поля (доступное из курсора) находится между 1 и 4, если нет, это виды удаляются.Динамически добавить/удалить View CursorAdapter в соответствии со значением данных

Итак, я создал LayoutFile, с этим видом, и в CursorAdapter, я проверяю, если поле доступа от курсора находится между 1 и 4, я извлекаю просмотры, в противном случае, я добавить в макет:

class Accounts_List_CursorAdapter extends CursorAdapter{ 
     // 
     Context context; 
     // 

     public Accounts_List_CursorAdapter(Context context, Cursor c) { 
      super(context, c, 0); 
      this.context = context; 

     } 

     @Override 
     // 
     //Inflate layout of the rows 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      return LayoutInflater.from(context).inflate(R.layout.row_list_accounts_data, parent, false); 
     } 

     @Override 
     // 
     //Set data and set changes to the row 
     public void bindView(View view, final Context context, Cursor cursor) { 
      // 
      //Find the elements 
      RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.layoutRowListAccountsData); 
      TextView tvAccountsName = (TextView) view.findViewById(R.id.tvAccountsName); 
      TextView tvAccountsInitValue = (TextView) view.findViewById(R.id.tvAccountsInitValue); 
      TextView tvAccountsType = (TextView) view.findViewById(R.id.tvAccountsType); 
      // 
      //Get data from cursor 
      final int accountId = cursor.getInt(cursor.getColumnIndexOrThrow(0)); 
      final String accountsName = cursor.getString(cursor.getColumnIndexOrThrow(1)); 
      final String accountsCurrValue = cursor.getString(cursor.getColumnIndexOrThrow(2)); 
      final String accountsInitValue = cursor.getString(cursor.getColumnIndexOrThrow(3)); 
      final String accountsType = cursor.getString(cursor.getColumnIndexOrThrow(4)); 
      // 
      tvAccountsName.setText(accountsName); 
      tvAccountsCurrValue.setText("Current Value = " + accountsCurrValue); 
      //  
      if ((accountId >= 1) && (accountId <= 4)){ 

       try { 
        relativeLayout.removeView(view.findViewById(R.id.cmdEditThisAccount)); 
        relativeLayout.removeView(view.findViewById(R.id.tvAccountsInitValue));* 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      else{ 
       // 
relativeLayout.addView(view.findViewById(R.id.cmdEditThisAccount)); 
      relativeLayout.addView(view.findViewById(R.id.tvAccountsInitValue)); 
// 
       tvAccountsInitValue.setText("Init Value = " + accountsInitValue); 
       // 
       Button cmdEditThisAccount = (Button) view.findViewById(R.id.cmdEditThisAccount); 
       cmdEditThisAccount.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
        Intent intent = new Intent(context, UpdateAccount.class); 
         context.startActivity(intent); 

        } 
       }); 
      } 
     } 
    } 

Проблема: когда я запускаю этот код, он выводит это сообщение: Java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка.

Что я делаю неправильно или есть другой способ скрыть и показать динамически TextView и Button из макета, в соответствии с данными, возвращаемыми курсором?

Спасибо заранее!

ответ

1

Использование View.setVisibility(FLAG) т.е. view.findViewById(R.id.cmdEditThisAccount).setVisibility(View.GONE)

api doc

+0

Спасибо очень много! Вы спасли мой день: так просто, и я делаю много вещей в своем коде, и он разбился ... Просто изменился на setVisibility (View.Gone), теперь приложение работает отлично! – tdmsoares

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