java - Android Studio : Java or XML issue?

标签 java android xml android-layout android-studio

我正在尝试学习如何编写 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_parentwrap_content

谢谢大家。

关于java - Android Studio : Java or XML issue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36157103/

相关文章:

javascript - Python lxml 库无法解析 < 和 >

.net - 多态 XML 序列化/反序列化

java - 如何让我的代码继续接收用户输入,直到密码与参数匹配?

java - 我怎样才能在Android中解析这个JSON?

java - 单元测试 Presenter 的业务逻辑

android - 如何让我的 app.iml 在 Android Studio 项目重建时保持稳定?

android - PhoneGap 和 WhatsApp

java - 字符串数组解析

android - 是否可以在其他 arm linux 中运行 art(android 运行时)二进制文件?

java - 在 Java 中解析 XML 文件并输出所有错误