将下一个和上一个按钮添加到ListView

问题描述

我正在尝试让我的列表视图显示5行,当按下下一个按钮时,它显示下5个,当单击上一个按钮时,它显示前5个。由于某种原因,它无法正常工作应用程序,因此如果有人可以告诉我我哪里出了问题,那将非常有帮助。谢谢

InventoryStatus类:

public class InventoryStatus extends AppCompatActivity {
DatabaseHelper myDB;
int position = 0;

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


    myDB = new DatabaseHelper(this);
    ListView listView = (ListView) findViewById(R.id.listViewStock);
    Button btNext = findViewById(R.id.buttonNext);
    Button btPrevIoUs = findViewById(R.id.buttonPrevIoUs);

    ArrayList<String> theList = new ArrayList<>();
    Cursor data = myDB.getAllData();

    if(data.getCount() == 0 ){
        Toast.makeText(InventoryStatus.this,"No data found",Toast.LENGTH_SHORT).show();
    }else{
        while (data.movetoNext()){
            theList.add("Name: " + data.getString(0) + " Quantity: " + data.getString(1) + " Type: " + data.getString(2));
            listadapter listadapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList);
            listView.setAdapter(listadapter);
            
            for(int i = position; i < position + 5; i++){
                theList.get(i);
            }
        }
    }
    btNext.setonClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            position += 5;
        }
    });
    btPrevIoUs.setonClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            position -= 5;
        }
    });

 
}

}

活动:

<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".InventoryStatus">

<ListView
    android:id="@+id/listViewStock"
    android:layout_width="395dp"
    android:layout_height="359dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textViewInventoryStatus"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/inventory_status"
    android:textSize="30sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.549"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.037" />

<Button
    android:id="@+id/buttonNext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/next"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.95"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.967" />

<Button
    android:id="@+id/buttonPrevIoUs"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/prevIoUs"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.049"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.967" />
</androidx.constraintlayout.widget.ConstraintLayout>

解决方法

检查我编写的此示例项目(只需注释您的main并添加它,它将与您的布局配合使用)

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class InventoryStatus extends AppCompatActivity
{
    private ArrayList<String> fullList; // list which keeps all data from DB
    private ArrayList<String> displayedList; // list which is currently displayed in ListView
    private int currentPos = 0; // position in `fullList`
    ArrayAdapter<String> listAdapter;
    ListView listView;

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

        listView = findViewById(R.id.listViewStock);
        Button btNext = findViewById(R.id.buttonNext);
        Button btPrevious = findViewById(R.id.buttonPrevious);

        fullList = new ArrayList<>();
        displayedList = new ArrayList<>();

        // Load data from db to fullList (I am not using db to show example)

        for (int i = 0; i < 23; i++)
        {
            fullList.add("Name " + i);
        }

        if (fullList.size() == 0)
        {
            Toast.makeText(this,"No data found",Toast.LENGTH_SHORT).show();
        }
        else // fullList isn't empty show first 5 items in ListView
        {
            setDisplayListPosition();
            listView.setAdapter(listAdapter);
        }

        btNext.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view) // change current position and refresh ListView
            {
                currentPos += 5;
                if (currentPos > fullList.size()) currentPos -= 5;
                else
                    setDisplayListPosition();
            }
        });

        btPrevious.setOnClickListener(new View.OnClickListener() // change current position and refresh ListView
        {
            public void onClick(View view)
            {
                currentPos -= 5;
                if (currentPos < 0) currentPos = 0;
                else
                    setDisplayListPosition();
            }
        });
    }

    private void setDisplayListPosition() // helper function which refresh ListView based on `currentPos`
    {
        displayedList.clear(); 

        for (int i = 0; i < 5 && i + currentPos < fullList.size(); i++)
        {
            displayedList.add(fullList.get(currentPos + i)); // ad 5 items from finalList to displayedList
        } 

        listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,displayedList
        );

        listView.setAdapter(listAdapter);
    }
}