Android GridLayout во всплывающем окне не отображает данные - PullRequest
0 голосов
/ 10 декабря 2018

В настоящее время мы работаем над небольшой игрой для устройств Android, и у меня возникла небольшая проблема: я хочу открыть всплывающее окно, в котором отображаются все оставшиеся плитки.Но по какой-то причине во всплывающем окне ничего не отображается, что я пропускаю?Обратите внимание, что listForAdapter - это ArrayList, включающий тестовые данные, объект с плиткой и сумму.Похоже, это не вызывает никаких проблем.

  /**Inflate and position the bag's Layout*/
            LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View layout = inflater.inflate(R.layout.bag,null);

            float density = this.getResources().getDisplayMetrics().density;
            final PopupWindow pw = new PopupWindow(layout, (int)density*350, (int)density*450, true);

            /**Set up button and listener to close the bag*/
            ((Button) layout.findViewById(R.id.close)).setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    pw.dismiss();
                }
            });

            /**set up the bag's RecyclerView*/
            pw.showAtLocation(layout, Gravity.CENTER, 0, (int) density*10);
            RecyclerView recyclerView  = (RecyclerView) layout.findViewById(R.id.my_recycler_view);
            recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
            BagRecyclerAdapter adapter = new BagRecyclerAdapter(this, listForAdapter);
            recyclerView.setAdapter(adapter);

В BagRecyclerAdapter наша идея состоит в том, чтобы открыть его в обзоре переработчика, который включает в себя разметку сетки, но в настоящее время он просто остается белым:

public class BagRecyclerAdapter extends RecyclerView.Adapter<BagRecyclerAdapter.ViewHolder> {

    private Context mContext;
    private List<GameBoardActivity.TileCount> bData;
    private LayoutInflater bInflater;

    /**
     * fetched bag is fed into the constructor
     */
    BagRecyclerAdapter(Context context, List<GameBoardActivity.TileCount> data) {
        mContext=context;
        this.bInflater = LayoutInflater.from(context);
        this.bData = data;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView counter;
        public ImageView tileInfo;

        public ViewHolder(View itemView) {
            super(itemView);
            counter = itemView.findViewById(R.id.info_number);
            tileInfo= itemView.findViewById(R.id.info_image);
        }
    }

    /**
     * inflates the cell layout from xml when needed
     */
    @NonNull
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = bInflater.inflate(R.layout.bag_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        GameBoardActivity.TileCount curr = bData.get(i);
        switch(curr.tile.getShape()){
            case 0: viewHolder.tileInfo.setImageResource(R.drawable.circle); break;
            case 1: viewHolder.tileInfo.setImageResource(R.drawable.frame); break;
            case 2: viewHolder.tileInfo.setImageResource(R.drawable.plus); break;
            case 3: viewHolder.tileInfo.setImageResource(R.drawable.domino); break;
            case 4: viewHolder.tileInfo.setImageResource(R.drawable.point); break;
            case 5: viewHolder.tileInfo.setImageResource(R.drawable.pointhollow); break;
            case 6: viewHolder.tileInfo.setImageResource(R.drawable.ring); break;
            case 7: viewHolder.tileInfo.setImageResource(R.drawable.spade); break;
            case 8: viewHolder.tileInfo.setImageResource(R.drawable.cross); break;
            case 9: viewHolder.tileInfo.setImageResource(R.drawable.sun); break;
            case 10: viewHolder.tileInfo.setImageResource(R.drawable.triangle); break;
            case 11: viewHolder.tileInfo.setImageResource(R.drawable.rectangle); break;
        }
        switch(curr.tile.getColor()){
            case 0: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xffe6194B, 0)); break;
            case 1: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xff3cb44b, 0)); break;
            case 2: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xffffe119, 0)); break;
            case 3: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xff4364d8, 0)); break;
            case 4: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xfff58231, 0)); break;
            case 5: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xffaaffc3, 0)); break;
            case 6: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xff469990, 0)); break;
            case 7: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xff8904b1, 0)); break;
            case 8: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xfff032e6, 0)); break;
            case 9: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xffa9a9a9, 0)); break;
            case 10: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xff9A6324, 0)); break;
            case 11: viewHolder.tileInfo.setColorFilter(new LightingColorFilter(0xffffffff, 0)); break;
        }
        viewHolder.counter.setText(Integer.toString(curr.getCount()));
    }

    @Override
    public int getItemCount() {
        return bData.size();
    }


    }

и два необходимых XML:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/popup_element"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorWhite"
    >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/close"
        android:layout_marginBottom="462dp">

        <LinearLayout
            android:id="@+id/recLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:orientation="vertical">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/my_recycler_view"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:scrollbars="none" />
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="@string/close_bag"
        />
</RelativeLayout>

Номер 2:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="5dp"
    android:layout_width="50dp"
    android:layout_height="50dp">

    <ImageView
        android:id="@+id/info_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:background="@color/colorAccent"/>
    <TextView
        android:id="@+id/info_number"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:gravity="bottom|right"
        android:background="@color/colorGrey"/>

</LinearLayout>

1 Ответ

0 голосов
/ 10 декабря 2018

Как @MikeM.Как уже упоминалось выше, решение состояло в том, чтобы удалить части первого (не второго, как я ошибочно сказал в комментарии) XML:

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/close"
        android:layout_marginBottom="462dp">

        <LinearLayout
            android:id="@+id/recLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:orientation="vertical">

...

        </LinearLayout>
    </ScrollView>

Это работало какчто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...