Ich versuche zu lernen, Android-Apps zu kodieren, und habe durch die Big Nerd Ranch
Android-Buch gearbeitet. Ich habe Java-Erfahrung, aber kein XML/Handy, und ich bin auf ein Problem gestoßen - aber ich bin mir nicht sicher, ob das Problem in der Java oder der XML ist.Android Studio: Java oder XML Problem?
Ich habe debugged und doppelt überprüft, Mein Code entspricht dem Beispielcode genau - aber der Beispielcode erzeugt die richtigen Ergebnisse. Meine ist richtig mit einer Wendung.
Hier ist das Problem. Der Bildschirm onCreate
soll wie folgt aussehen:
Verbrechen Titel (Textview) CheckBox
Verbrechen Datum (Textview)
Verbrechen Titel (Textview) CheckBox
Verbrechen Datum (Textview)
Verbrechen Titel (TextView) CheckBox
Verbrechen Datum (Textview)
Verbrechen Titel (Textview) CheckBox
Verbrechen Datum (Textview)
(...)
Aber hier ist, was ich bekommen:
Verbrechen Titel (TextView) CheckBox
Verbrechen Datum (Textview)
(...)
[nach unten zum nächsten Bildschirm scrollen]
(...)
Verbrechen Titel (TextView) CheckBox
Verbrechensdatum (TextView)
So, alle richtigen Daten sind da, aber die Elemente aus der Liste sind auf verschiedenen Bildschirmen. Ich muss für jedes "Verbrechen" nach unten scrollen. Der richtige Weg sollte eine Liste auf dem Bildschirm sein, die weiterläuft, wenn Sie bis zum 100. "Verbrechen" scrollen.
Ich bin mir nicht sicher, ob dies ein Java-Problem oder ein XML-Problem ist. Ich verwende ein in der XML, mit einem CheckBox
und zwei TextView
s als die Kinder. Ich weiß, wie man das Java debuggt, aber das hat kein Ergebnis erzeugt, das ich als nützlich ansehen kann.
Hat jemand irgendwelche Einsichten oder Hilfe, die sie anbieten können, wo das Problem liegt?
Danke für den Hinweis!
ViewHolder
Layout:
<?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
Quellcode:
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
Quellcode:
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
Layout:
<?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
Quellcode:
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();
}
}
}
Können Sie Ihre XML-Datei anhängen? – Dario
Wenn ich richtig verstanden habe Ihr Layout ist ausgedehnt, können Sie versuchen, übergeordnete Layouthöhe zu setzen: Android: layout_height = "wrap_content" – gregaj
Bitte post Ihre Layout-XML. – ScottishUser