当前位置: 首页 > 知识库问答 >
问题:

如何在ScrollView中从imageview中选择项目?

融焕
2023-03-14

由于我是android工作室的新手,请耐心等待。我想制作一个滚动视图,包含具有相应名称(textview)的图像。我想能够通过在滚动视图中触摸它来选择一个图像,但我不知道如何选择。我已经实现了这样的滚动视图,我也想能够添加图片与一个名称附加到他们。

main_activity.xml

        android:id="@+id/scrollFilterView"
        android:layout_width="fill_parent"
        android:layout_height="130dp"
        android:scrollbars="none"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.57"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0">

        <LinearLayout
            android:id="@+id/gallery"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal" />
    </HorizontalScrollView>

ScrollView.xml

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

    <ImageView
        android:id="@+id/filterView"
        android:layout_width="90dp"
        android:layout_height="90dp"
        app:srcCompat="@android:drawable/sym_def_app_icon"
        android:contentDescription="filterView" />

    <TextView
        android:id="@+id/textFilter"
        android:layout_width="90dp"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:text="textFilter" />

mainactivity.java

LayoutInflater inflater = LayoutInflater.from(this);

        for (int i = 0; i < NUMBER_OF_FILTERS_GRID; i++ ) {

            View scrollView = inflater.inflate(R.layout.scrollview, gallery, false);

            TextView textview = scrollView.findViewById(R.id.textFilter);
            textview.setText("Filter "+ i);

            ImageView filterView = scrollView.findViewById(R.id.filterView);
            filterView.setImageResource(R.mipmap.ic_launcher);

            gallery.addView(scrollView);
        }
    }

如果这是正确的路径,我应该使用什么功能,我非常赞赏的一些输入:)

共有1个答案

裘嘉树
2023-03-14

使用RecolyerView而不是ListView,并与and adapter一起使用,这将授予您对列表上显示的每个项的更多控制权(在本例中是在RecolyerView中),您将需要创建and adapter类,一个用于您的项的简单类和一个新的XML布局,该布局将用作列表中每个项的模型。

项目的简单类:

public class dataSetItem {

private Integer image;
private String listItemText;

public Integer getImage() {
return image;
}

public void setImage(Integer image) {
this.image = image;
}

public String getListItemText() {
return listItemText;
}

public void setListItemText(String listItemText) {
this.listItemText = listItemText;
}

}

在mainActivity中删除listView和for循环,改用以下内容:

  public class MyActivity extends Activity {
        private RecyclerView recyclerView;
        private RecyclerView.Adapter mAdapter;
        private RecyclerView.LayoutManager layoutManager;
        private ArrayList mAdapter = new ArrayList();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_activity);
            recyclerView = (RecyclerView) findViewById(R.id.your_recycler_view);

            mDataset.add(dataSetItem("item 1", R.mipmap.ic_launcher))
            mDataset.add(dataSetItem("item 2", R.mipmap.ic_launcher))

            // You can add more items to the mDataset list and call the adapter again to update the RecyclerView




            // use a linear layout manager
            layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);

            // specify an adapter (see also next example)
            mAdapter = new MyAdapter(myDataset);
            recyclerView.setAdapter(mAdapter);
        }
        // ...
    }

创建以下XML布局,该布局将作为每个项目的模型,称为my_item_list_layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" 
    android:layout_height="wrap_content"
    android:layout_width="match_parent">


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:gravity="center">

                <ImageView
                    android:id="@+id/the_image_i_want_to_click"
                    android:layout_width="80dp"
                    android:layout_margin="10dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center"
                    android:layout_marginLeft="10dp"
                    android:background="@color/ADRBlack"
                    />
                    <TextView
                        android:id="@+id/item_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:maxWidth="220dp"
                        android:textColor="@color/Black"
                        android:textSize="16sp"
                        tools:text="Example Restaurant" />
                </LinearLayout>
</LinearLayout>

现在是adapter类,在本例中称为MyAdapter:

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
        private customItem[] mDataset;

        // Provide a reference to the views for each data item
        // Complex data items may need more than one view per item, and
        // you provide access to all the views for a data item in a view holder
        public static class MyViewHolder extends RecyclerView.ViewHolder {
            // each data item is just a string in this case
            public TextView textView;
            public MyViewHolder(TextView v) {
                super(v);
                textView = v;
            }
        }

        // Provide a suitable constructor (depends on the kind of dataset)
        public MyAdapter(customItem[] myDataset) {
            mDataset = myDataset;
        }

        // Create new views (invoked by the layout manager)
        @Override
        public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {
            // create a new view
            TextView v = (TextView) LayoutInflater.from(parent.getContext())
                    .inflate(R.my_item_list_layout, parent, false);
                       

            MyViewHolder vh = new MyViewHolder(v);
            return vh;
        }

        // Replace the contents of a view (invoked by the layout manager)
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            // - get element from your dataset at this position
            // - replace the contents of the view with that element
            holder.textView.setText(mDataset[position].getListItemText);
            holder.textView.setBackground(mDataset[position].getImage);

            //Now to do something when you clic the image use this

            holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
            
                //Your action here

           }
          });

        }

        // Return the size of your dataset (invoked by the layout manager)
        @Override
        public int getItemCount() {
            return mDataset.length;
        }
    }
 类似资料:
  • 问题内容: 我需要在手机中打开我的画廊,然后选择一张在活动中在imageview中打开的图片..没什么困难..但是我在模拟器(genymotion)中有完美的代码和thise代码可以运行..但是在小米Mi4上却没有。 打开画廊选择项目,什么也没有。 我没有更多的电话了:( 我尝试下载一些与此主题相关的示例,并且每个示例都是相同的。 您是否有一些从图库中选择图像并在imageview中显示的项目?如

  • 我无法找到一种方法来创建一个输入字段在Flutter将打开一个下拉的名字列表。Flutter material Widgets可能吗? 就像这样

  • 我将html写成 现在我希望如果选项是1,那么它应该被选择为 请帮帮我!!!

  • 问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-) ​

  • 我想从下面的列表中选择一个使用selenium的选项: 这里 但问题是没有列表可供选择。 在此输入图像说明 我到目前为止的代码: 需要帮助!!

  • 问题内容: 我有一个类似下面的生成器函数: 调用此函数的常用方法是: 我的问题是,有什么方法可以随时从生成器中获取一个元素吗?例如,我想做类似的事情: 问题答案: 使用创建一个生成器 每当您想要一件物品时,请使用 (或在Python 2.5或更低版本中)。 如果发电机退出,它将升高。您可以根据需要捕获此异常,也可以将参数使用到: