繁体   English   中英

为 ListView Android studio 中的项目添加简单导航

[英]Add simple navigation to Items in ListView Android studio

我已经在寻找各种导航解决方案,但我的应用程序都不适合。

我有使用数组适配器在 ListView 中显示的 Parcelable 对象。 当我单击项目时,它会转到具有另一个布局的另一个活动,专用于显示带有图片库、标题等的单个项目。因此,我想添加简单的导航,如图所示,如果存在,则移动到下一个项目,上一个项目如果存在并返回列表视图。

这是一些代码

单项活动

public class SingleItem extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_item);

        Intent intent = getIntent();

        Single singleItem = intent.getParcelableExtra("Single");

        String id = singleItem.getId();
        Integer position = singleItem.getPosition();
        String title = singleItem.getTitle();
        String subtitle = singleItem.getSubtitle();
        String text = singleItem.getText();
        int[] image = singleItem.getImage();

        TextView titleTV = findViewById(R.id.singleItemTitle);

        LinearLayout gallery = findViewById(R.id.gallery);
        LayoutInflater inflater = LayoutInflater.from(this);


        for (int i = 0; i < image.length; i++) {
            View view = inflater.inflate(R.layout.single_item_gallery, gallery, false);
            ImageView imageView = view.findViewById(R.id.singleItemGalleryImage);
            imageView.setImageResource(image[i]);
            gallery.addView(view);
        }

        TextView descTV = findViewById(R.id.singleItemDesc);

        titleTV.setText(title);
        descTV.setText(text);
    }
} 

这是我的适配器

val listViewAdapter = ItemListAdapter(this, R.layout.adapter_view_layout, itemList)
        listView.adapter = listViewAdapter


        listView.setOnItemClickListener { _: AdapterView<*>, _: View, position : Int, _: Long ->
            val intent = Intent(this, SingleItem::class.java)
            intent.putExtra("Single", itemList[position])
            startActivity(intent)
        }

单项布局

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

    <TextView
        android:id="@+id/singleItemTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/singleItemTitle">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <HorizontalScrollView
                android:layout_width="match_parent"
                android:layout_height="220dp"
                android:paddingStart="10dp"
                android:scrollbars="none"
                android:paddingEnd="10dp">

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

            </HorizontalScrollView>

            <TextView
                android:id="@+id/singleItemDesc"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

我想把导航放在上面的布局中。

列表显示:

在此处输入图像描述

单项导航示例:

在此处输入图像描述

您好,欢迎来到 StackOverflow (SO)!

作为一个新手,您可能不知道,但是,在 SO 上,您应该清楚地定义您的问题。 我没有看到直接的问题。 我推断您需要一组指南来使用 Android 实现您的图库视图,并能够使用按钮在它们之间滑动(如果我没记错的话)。

你的方法理论上是可以的。 剩下要做的就是从 SingleItem Activity 中获取对 Next/Previous 按钮的引用,并在按下 Next/Previous 按钮时手动滚动 HorizontalScrollView object。

但是,您的代码在以下代码段中存在重大缺陷。

for (int i = 0; i < image.length; i++) {
        View view = inflater.inflate(R.layout.single_item_gallery, gallery, false);
        ImageView imageView = view.findViewById(R.id.singleItemGalleryImage);
        imageView.setImageResource(image[i]);
        gallery.addView(view);
    }

这是你不应该做的事情。 相反,请使用RecyclerView ,它只会在需要显示时加载您的图像。 访问详细视图 (SingleItem) 后,您实际上是在创建所有图像视图。

您当前的方法可能适用于一些图像,但不建议用于很多图像,因为它可能

  • 加载图像时减慢并冻结应用程序
  • 你最终会用完 memory

一旦你用 RecyclerView 实现了这个,试一试,看看它是否有效。 如果您仍然有问题,请不要犹豫!

干杯!

我看到两个选项:

  1. 无需将整个 Parcelable 放入意图中,只需放入 object 的某种 ID。 它可以是一个主键,如果你将它们存储在数据库中,或者只是一个数组索引,如果它是 memory 中的一个数组,它保存在一些 singleton object 中。 然后在 SingleItem 活动的onCreate中通过 ID 找到项目并加载它。 因此,您可以从 SingleItem 活动中打开更多 SingleItem 活动,只需将下一个或上一个项目 ID 传递给它。
  2. 请改用片段。 您将拥有一个活动,其中包含对项目列表的引用,以及两个片段,一个用于列表视图,另一个用于单个项目显示。 因此,在单个项目片段中,一旦单击“下一步”按钮,您就可以在父活动上调用一个方法,然后该方法将获取下一个项目并使用新数据创建一个替换的单个项目片段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM