Не удалось установить вид невидимым

Я пытаюсь поставить представление (в list_child), чтобы установить невидимым, если один ребенок равен нулю (в expandable listview заселены external sqlite database и используя simplecursortreeadapater) ..
Я пытался сделать это так:
1. Измените представление внутри viewbinder class и 2. установить условие в case.child2..но я получил нулевой указатель для view.setvisibility (когда приложение падает) .. что я делаю не так? Спасибо

 public class MyViewBinder implements SimpleCursorTreeAdapter.ViewBinder {
    View view1=(View)findViewById(R.id.view1);
            @Override
            public boolean setViewValue(View view, final Cursor cursor, int columnIndex) {
                int viewID = view.getId();
                switch (viewID) {
                    case R.id.group1:
                        TextView groupName = (TextView) view;
                        String groupname;
                        groupname = cursor.getString(cursor.getColumnIndex(Database.DATABASE_GROUP_1));
                        groupName.setText(Html.fromHtml(groupname));

                        break;
                case R.id.child1:
                    TextView friendName = (TextView) view;
                    String friend_name;
                    friend_name = cursor.getString(cursor.getColumnIndex(Database.DATABASE_CHILD_1));
                    friendName.setText(Html.fromHtml(friend_name));
                    break;

                case R.id.child2:
                    final ImageView url = (ImageView) view;
                    final String urls;
                    urls = cursor.getString(cursor.getColumnIndex(Database.DATABASE_CHILD_2));
                    if (urls != null) {
                        Glide.with(AnatomyNostrils.this).load(urls).apply(new RequestOptions().dontTransform().format(DecodeFormat.PREFER_ARGB_8888)).into(url);
                        view.findViewById(R.id.child2).setVisibility(View.VISIBLE);
view1.setVisibility(View.VISIBLE);

                    } else {
                        view.findViewById(R.id.child2).setVisibility(View.GONE);
view1.setVisibility(View.GONE);
                    }
                    url.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            AlertDialog.Builder mBuilder = new AlertDialog.Builder(AnatomyNostrils.this);
                            View mView = getLayoutInflater().inflate(R.layout.dialog_custom_layout, null);
                            PhotoView photoView = mView.findViewById(R.id.imageView);
                            photoView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                            photoView.setImageDrawable(((ImageView) view).getDrawable());
                            Glide.with(AnatomyNostrils.this).load(urls).apply(new RequestOptions().dontTransform().format(DecodeFormat.PREFER_ARGB_8888)).into(photoView);
                            mBuilder.setView(mView);
                            AlertDialog mDialog = mBuilder.create();
                            mDialog.show();
                        }
                    });
                    break;

list_child.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="12dp">

    <TextView
        android:id="@+id/child1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="@dimen/textsizechildexpandablelistview"
        android:textIsSelectable="true"
        android:paddingBottom="5dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:paddingTop="2dp"
        android:textColor="@android:color/black"

        />

    <LinearLayout
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/child1"
        android:visibility="visible"
        android:orientation="horizontal">


        <ImageView
            android:layout_weight="1"
            android:id="@+id/child3"
            android:layout_width="match_parent"
            android:layout_height="@dimen/heightimageviewchildexpandablelistview"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp" />

        <View
            android:layout_width="1dp"
            android:id="@+id/view2"
            android:layout_height="match_parent"
            android:layout_margin="6dp"
            android:background="#cc0033" />

        <ImageView
            android:layout_weight="1"
            android:id="@+id/child2"
            android:layout_width="match_parent"
            android:layout_height="@dimen/heightimageviewchildexpandablelistview"
            android:layout_marginBottom="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp" />

        <View
            android:layout_width="1dp"
            android:id="@+id/view1"
            android:layout_height="match_parent"
            android:layout_margin="6dp"
            android:background="#cc0033" />

    </LinearLayout>

Изображение из эмулятора: https://i.imgur.com/cj9dWSX.png

1 ответ

Если ваш код внутри case R.id.child2: выполняется тогда view это представление, которое вы хотите показать / скрыть, поэтому замените:

view.findViewById(R.id.child2).setVisibility(...);

с:

view.setVisibility(...);
Другие вопросы по тегам