有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我会得到一个带有此代码的空白屏幕?

我正在关注Big nerd ranch的安卓书(第二版)。下面的代码将显示从CrimeLab类生成的模型数据列表(100个犯罪,每个犯罪都带有标题、日期和已解决复选框)。CrimeListFragment中使用RecycleView来显示数据。但在建筑及保养方面,;运行应用程序时,我得到的只是一个空白的白色屏幕。 以下是相关代码:

public class CrimeListActivity extends FragmentActivity {

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragment_host);

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragment_container);
    if (fragment == null) {
        fragment = new CrimeListFragment();
        fm.beginTransaction().add(R.id.fragment_container, fragment).commit();
    }
}}

犯罪分子碎片。爪哇

public class CrimeListFragment extends Fragment {

private RecyclerView mCrimeRecyclerView;

private CrimeAdapter mAdapter;

public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.fragment_crime_list,container,false);
    mCrimeRecyclerView = (RecyclerView) view.findViewById(R.id.crime_recycler_view);
    mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    updateUI();
    return view;
}

private void updateUI(){
    CrimeLab crimeLab = CrimeLab.get(getActivity());
    List<Crime> crimes = crimeLab.getCrimes();
    mAdapter = new CrimeAdapter(crimes);
    mCrimeRecyclerView.setAdapter(mAdapter);

}

public class CrimeHolder extends RecyclerView.ViewHolder{

    public TextView mTitleTextView;
    private TextView mTitleTextView;
    private TextView mDateTextView;
    private CheckBox mSolvedCheckBox;
    private Crime mCrime;

    public CrimeHolder (View itemView){
        super(itemView);
      //  mTitleTextView = (TextView) 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.setEnabled(mCrime.isSolved());
    }

}

public 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();
    }
}

以防万一,克里米亚。java:(提供模型数据)

public class CrimeLab {
private static CrimeLab sCrimeLab;
private List<Crime> mCrimes;

public static CrimeLab get(Context context){
    if (sCrimeLab==null){
        sCrimeLab = new CrimeLab(context); //Hence calling the private constructor that no other class can access
    }
    return  sCrimeLab;
}

private CrimeLab(Context context){
    mCrimes = new ArrayList<>();
    for (int i=0; i<100; i++){
        Crime crime = new Crime();
        crime.setTitle("Crime #"+i);
        crime.setSolved(i%2==0);
        mCrimes.add(crime);
    }
}

public List<Crime> getCrimes(){
    return mCrimes;
}

内容\u片段\u主机。xml(这是由activity_fragment_host.xml编辑的,我确实从中删除了默认的AppBarLayout&Toolbar代码,如果有帮助的话)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"

tools:context="com.bignerdranch.安卓.crimeintent.CrimeListActivity"
tools:showIn="@layout/activity_fragment_host"
安卓:id="@+id/fragment_container">

</FrameLayout>

碎片犯罪清单。xml

<?xml version="1.0" encoding="utf-8"?>
<安卓.support.v7.widget.RecyclerView     xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
                                    安卓:layout_width="match_parent"
                                    安卓:layout_height="match_parent"
                                    安卓:id="@+id/crime_recycler_view">

</安卓.support.v7.widget.RecyclerView>

列出犯罪项目。xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
            安卓:layout_width="match_parent"
            安卓:layout_height="match_parent"
            xmlns:tools="http://schemas.安卓.com/tools">


<CheckBox
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:id="@+id/list_item_crime_solved_check_box"
    安卓:layout_alignParentRight="true"
    安卓:padding="4dp"/>

<TextView
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:id="@+id/list_item_crime_title_text_view"
    安卓:layout_toLeftOf="@+id/list_item_crime_solved_check_box"
    安卓:textStyle="bold"
    安卓:padding="4dp"
    tools:text="Title"/>

<TextView
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:id="@+id/list_item_crime_date_text_view"
    安卓:layout_toLeftOf="@+id/list_item_crime_solved_check_box"
    安卓:layout_below="@id/list_item_crime_title_text_view"
    安卓:padding="4dp"
    tools:text="Date"/>

</RelativeLayout>

共 (2) 个答案

  1. # 1 楼答案

    那只是个打字错误。在CrimeListFragment中,onCreateView已更改为onCreateView。JAVA但是谢谢,不管怎样,这让我发疯了

  2. # 2 楼答案

    每次使用fragment并希望显示它或替换为另一个时,都需要从FragmentManager调用commit()。你的情况是fm。提交()

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragment_container);
    if (fragment == null) {
        fragment = new CrimeListFragment();
        fm.beginTransaction().add(R.id.fragment_container, fragment).commit();
    }
    fm.commit();