Java ListView自定义适配器位置卡在0处

Java ListView自定义适配器位置卡在0处,java,android,android-listview,Java,Android,Android Listview,我正在跟踪此ListView,但我的ListViewlistVThisMonthRecords卡在0位置,它只打印出ArrayListthisMonthRecords的第一项。ArrayListthisMonthRecords中有3个记录对象 我已经设置了调试日志,以了解CustomAdapter中发生了什么,下面是输出。看起来thismonthrocrds已正确传递,其中包含3项,但问题是每次调用CustomAdapter中的getView()时,该位置每次都卡在0处。我不知道如何解决这个问

我正在跟踪此ListView,但我的ListView
listVThisMonthRecords
卡在0位置,它只打印出ArrayList
thisMonthRecords
的第一项。ArrayList
thisMonthRecords
中有3个
记录
对象

我已经设置了调试日志,以了解
CustomAdapter
中发生了什么,下面是输出。看起来
thismonthrocrds
已正确传递,其中包含3项,但问题是每次调用
CustomAdapter
中的
getView()
时,该位置每次都卡在0处。我不知道如何解决这个问题。谢谢你在这方面的帮助

2020-09-03 06:37:38.872 15873-15873/com.raaiq.navdrawertest D/Android: HistoryFragment: Total Record Found for this month: 3
2020-09-03 06:37:38.872 15873-15873/com.raaiq.navdrawertest D/Android: HistoryFragment: Records #0: 2020-9-1, counter = 14
2020-09-03 06:37:38.872 15873-15873/com.raaiq.navdrawertest D/Android: HistoryFragment: Records #1: 2020-9-2, counter = 20
2020-09-03 06:37:38.872 15873-15873/com.raaiq.navdrawertest D/Android: HistoryFragment: Records #2: 2020-9-3, counter = 20
2020-09-03 06:37:38.875 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: hasStableIds() = false
2020-09-03 06:37:38.876 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: areAllItemsEnabled()
2020-09-03 06:37:38.876 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getCount(). Record size: 3
2020-09-03 06:37:38.876 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getCount(). Record size: 3
2020-09-03 06:37:38.876 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: registerDataSetObserver
2020-09-03 06:37:38.881 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getViewTypeCount(). Record size: 3
2020-09-03 06:37:38.886 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getCount(). Record size: 3
2020-09-03 06:37:38.886 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.886 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getView(0)
2020-09-03 06:37:38.886 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: Record #0 2020-9-1, 14
2020-09-03 06:37:38.893 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.893 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
2020-09-03 06:37:38.893 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.894 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getCount(). Record size: 3
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getView(0)
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: Record #0 2020-9-1, 14
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.901 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
2020-09-03 06:37:38.902 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.902 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getCount(). Record size: 3
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getView(0)
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: Record #0 2020-9-1, 14
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: getItemViewType(0)
2020-09-03 06:37:38.906 15873-15873/com.raaiq.navdrawertest D/Android: CustomAdapter: isEnabled(0) = true
HistoryFragment.java

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        historyViewModel = ViewModelProviders.of(this).get(HistoryViewModel.class);
        root = inflater.inflate(R.layout.fragment_history, container, false);
        context=getActivity();

        initialize();
        return root;
    }

    ...

    public void setListVThisMonthRecords(){
        ListView listVThisMonthRecords = root.findViewById(R.id.list);
        getThisMonthRecord();
        CustomAdapter customAdapter = new CustomAdapter(context, thisMonthRecords);
        listVThisMonthRecords.setAdapter(customAdapter);
    }
package com.raaiq.dailyzikir.ui.history;

import android.content.Context;
import android.database.DataSetObserver;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;

import com.raaiq.dailyzikir.ui.home.Record;
import com.raaiq.dailyzikirtest.R;

import java.util.ArrayList;

class CustomAdapter implements ListAdapter {
    private ArrayList records;
    private Context context;

    public CustomAdapter(Context context, ArrayList records) {
        this.records=records;
        this.context=context;

    }
    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }
    @Override
    public boolean isEnabled(int position) {

        return true;
    }
    @Override
    public void registerDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public int getCount() {
        return records.size();
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public boolean hasStableIds() {
        return false;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final Record record = (Record) records.get(position);

        if(convertView == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.list_row, null, true);
            TextView date = convertView.findViewById(R.id.txtDate);
            TextView counter = convertView.findViewById(R.id.txtCounter);
            date.setText(String.valueOf(record.getDate()));
            counter.setText(String.valueOf(record.getCounter()));
        }
        return convertView;
    }
    @Override
    public int getItemViewType(int position) {
        return position;
    }
    @Override
    public int getViewTypeCount() {
        return records.size();
    }
    @Override
    public boolean isEmpty() {
        return false;
    }
}
<?xml version="1.0" encoding="utf-8"?>

<ScrollView android:layout_height="wrap_content"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:stretchColumns="*" >
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
        </TableLayout>
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider = "#000"
            android:dividerHeight = "1dp"
            android:footerDividersEnabled = "false"
            android:headerDividersEnabled = "false">
        </ListView>
    </LinearLayout>
</ScrollView>
CustomAdapter.java

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        historyViewModel = ViewModelProviders.of(this).get(HistoryViewModel.class);
        root = inflater.inflate(R.layout.fragment_history, container, false);
        context=getActivity();

        initialize();
        return root;
    }

    ...

    public void setListVThisMonthRecords(){
        ListView listVThisMonthRecords = root.findViewById(R.id.list);
        getThisMonthRecord();
        CustomAdapter customAdapter = new CustomAdapter(context, thisMonthRecords);
        listVThisMonthRecords.setAdapter(customAdapter);
    }
package com.raaiq.dailyzikir.ui.history;

import android.content.Context;
import android.database.DataSetObserver;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;

import com.raaiq.dailyzikir.ui.home.Record;
import com.raaiq.dailyzikirtest.R;

import java.util.ArrayList;

class CustomAdapter implements ListAdapter {
    private ArrayList records;
    private Context context;

    public CustomAdapter(Context context, ArrayList records) {
        this.records=records;
        this.context=context;

    }
    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }
    @Override
    public boolean isEnabled(int position) {

        return true;
    }
    @Override
    public void registerDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public int getCount() {
        return records.size();
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public boolean hasStableIds() {
        return false;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final Record record = (Record) records.get(position);

        if(convertView == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.list_row, null, true);
            TextView date = convertView.findViewById(R.id.txtDate);
            TextView counter = convertView.findViewById(R.id.txtCounter);
            date.setText(String.valueOf(record.getDate()));
            counter.setText(String.valueOf(record.getCounter()));
        }
        return convertView;
    }
    @Override
    public int getItemViewType(int position) {
        return position;
    }
    @Override
    public int getViewTypeCount() {
        return records.size();
    }
    @Override
    public boolean isEmpty() {
        return false;
    }
}
<?xml version="1.0" encoding="utf-8"?>

<ScrollView android:layout_height="wrap_content"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:stretchColumns="*" >
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
        </TableLayout>
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider = "#000"
            android:dividerHeight = "1dp"
            android:footerDividersEnabled = "false"
            android:headerDividersEnabled = "false">
        </ListView>
    </LinearLayout>
</ScrollView>
fragment\u history.xml

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        historyViewModel = ViewModelProviders.of(this).get(HistoryViewModel.class);
        root = inflater.inflate(R.layout.fragment_history, container, false);
        context=getActivity();

        initialize();
        return root;
    }

    ...

    public void setListVThisMonthRecords(){
        ListView listVThisMonthRecords = root.findViewById(R.id.list);
        getThisMonthRecord();
        CustomAdapter customAdapter = new CustomAdapter(context, thisMonthRecords);
        listVThisMonthRecords.setAdapter(customAdapter);
    }
package com.raaiq.dailyzikir.ui.history;

import android.content.Context;
import android.database.DataSetObserver;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;

import com.raaiq.dailyzikir.ui.home.Record;
import com.raaiq.dailyzikirtest.R;

import java.util.ArrayList;

class CustomAdapter implements ListAdapter {
    private ArrayList records;
    private Context context;

    public CustomAdapter(Context context, ArrayList records) {
        this.records=records;
        this.context=context;

    }
    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }
    @Override
    public boolean isEnabled(int position) {

        return true;
    }
    @Override
    public void registerDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {

    }
    @Override
    public int getCount() {
        return records.size();
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public boolean hasStableIds() {
        return false;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final Record record = (Record) records.get(position);

        if(convertView == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.list_row, null, true);
            TextView date = convertView.findViewById(R.id.txtDate);
            TextView counter = convertView.findViewById(R.id.txtCounter);
            date.setText(String.valueOf(record.getDate()));
            counter.setText(String.valueOf(record.getCounter()));
        }
        return convertView;
    }
    @Override
    public int getItemViewType(int position) {
        return position;
    }
    @Override
    public int getViewTypeCount() {
        return records.size();
    }
    @Override
    public boolean isEmpty() {
        return false;
    }
}
<?xml version="1.0" encoding="utf-8"?>

<ScrollView android:layout_height="wrap_content"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:stretchColumns="*" >
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
            <TableRow .../>
        </TableLayout>
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:divider = "#000"
            android:dividerHeight = "1dp"
            android:footerDividersEnabled = "false"
            android:headerDividersEnabled = "false">
        </ListView>
    </LinearLayout>
</ScrollView>

list_row.xml

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

    <TextView
        android:id="@+id/txtDate"
        android:layout_width="200sp"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF"
        android:gravity="end"
        android:layout_marginLeft="40dp"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/txtCounter"
        android:layout_width="50sp"
        android:layout_height="match_parent"
        android:layout_marginLeft="20sp"
        android:gravity="start"
        android:textColor="#FFFFFF"
        android:textSize="30sp" />

</LinearLayout>


尝试使用nestedscrollview而不是scrollview。尝试使用nestedscrollview而不是scrollview。