问题描述
我正在尝试让我的列表视图显示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);
}
}