【问题标题】:Adding next and previous buttons to a ListView将下一个和上一个按钮添加到 ListView
【发布时间】:2021-01-24 02:32:56
【问题描述】:

我试图让我的列表视图显示 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>

【问题讨论】:

    标签: java android listview android-listview


    【解决方案1】:

    检查我编写的这个示例项目(只需评论您的 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);
        }
    }
    

    【讨论】:

    • 谢谢!我如何将我的数据库添加到 fullList?我尝试了完整列表。 add("名称" + i + "数量" + i + "类型" + i);但这不起作用
    • 如果这回答正确,那么接受它作为答案并提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多