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