根据数据值动态添加/删除视图CursorAdapter

时间:2015-12-28 20:16:54

标签: android android-studio android-cursoradapter

我有一个光标适配器,我只想显示一个按钮和一个TextView,如果一个字段的值(从光标访问)介于1和4之间,如果没有,则删除这些视图。

所以,我用这个视图创建了一个LayoutFile,在CursorAdapter中,我检查从光标访问的字段是否在1到4之间,我删除了Views,否则,我添加到Layout:

    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 个答案:

答案 0 :(得分:1)

使用View.setVisibility(FLAG),即view.findViewById(R.id.cmdEditThisAccount).setVisibility(View.GONE)

api doc