我正在尝试学习如何编写 Android 应用程序代码,并且一直在阅读 Big Nerd Ranch
Android 书籍。我有 Java 经验,但没有 XML/移动设备,并且我遇到了问题 - 但我不确定问题是出在 Java 还是 XML 中。
我已经调试并仔细检查,我的代码与示例代码完全匹配 - 但示例代码产生了正确的结果。我的想法是正确的,但略有不同。
问题就在这里。屏幕 onCreate
应该如下所示:
犯罪标题(TextView)复选框
犯罪日期(TextView)
犯罪标题(TextView)复选框
犯罪日期(TextView)
犯罪标题(TextView)复选框
犯罪日期(TextView)
犯罪标题(TextView)复选框
犯罪日期(TextView)
(...)
但这就是我得到的:
犯罪标题(TextView)复选框
犯罪日期(TextView)
(...)
[向下滚动到下一个屏幕]
(...)
犯罪标题(TextView)复选框
犯罪日期(TextView)
因此,所有正确的数据都在那里,但列表中的项目位于不同的屏幕上。我必须向下滚动查看每项“犯罪”。正确的方法应该是屏幕上出现一个列表,当您一直向下滚动到第 100 个“犯罪”时,该列表会继续显示。
我不确定这是 Java 问题还是 XML 问题。我在 XML 中使用 RelativeLayout
,并使用 CheckBox
和两个 TextView
作为子项。我知道如何调试 Java,但这没有产生我认为有用的结果。
有人可以提供有关问题所在的见解或帮助吗?
感谢您的建议!
ViewHolder
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/list_item_crime_solved_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="4dp"/>
<TextView
android:id="@+id/list_item_crime_title_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/list_item_crime_solved_check_box"
android:textStyle="bold"
android:padding="4dp"
tools:text="Crime Title"/>
<TextView
android:id="@+id/list_item_crime_date_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/list_item_crime_solved_check_box"
android:layout_below="@id/list_item_crime_title_text_view"
android:padding="4dp"
tools:text="Crime Date"/>
</RelativeLayout>
CrimeHolder
源代码:
private class CrimeHolder extends RecyclerView.ViewHolder {
private TextView mTitleTextView;
private TextView mDateTextView;
private CheckBox mSolvedCheckBox;
private Crime mCrime;
public CrimeHolder(View itemView) {
super(itemView);
mTitleTextView = (TextView)
itemView.findViewById(R.id.list_item_crime_title_text_view);
mDateTextView = (TextView)
itemView.findViewById(R.id.list_item_crime_date_text_view);
mSolvedCheckBox = (CheckBox)
itemView.findViewById(R.id.list_item_crime_solved_check_box);
}
public void bindCrime(Crime crime) {
mCrime = crime;
mTitleTextView.setText(mCrime.getTitle());
mDateTextView.setText(mCrime.getDate().toString());
mSolvedCheckBox.setChecked(mCrime.isSolved());
}
}
CrimeAdapter
源代码:
private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> {
private List<Crime> mCrimes;
public CrimeAdapter(List<Crime> crimes) {
mCrimes = crimes;
}
@Override
public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
View view = layoutInflater.inflate(R.layout.list_item_crime,
parent, false);
return new CrimeHolder(view);
}
@Override
public void onBindViewHolder(CrimeHolder holder, int position) {
Crime crime = mCrimes.get(position);
holder.bindCrime(crime);
}
@Override
public int getItemCount() {
return mCrimes.size();
}
}
Activity
布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
SingleFragmentActivity
源代码:
public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
if(fragment == null) {
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
最佳答案
很抱歉回答我自己的问题,但我想指出 @EpicPandaForce 和 @tommus为我指明了正确的方向。我调整了 RecyclerView 中的layout_height 和RelativeLayout 中的layout_height,问题似乎已得到解决。
从 match_parent
到 wrap_content
。
谢谢大家。
关于java - Android Studio : Java or XML issue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36157103/