2016-03-22 15 views
0

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

    Können Sie Ihre XML-Datei anhängen? – Dario

    +0

    Wenn ich richtig verstanden habe Ihr Layout ist ausgedehnt, können Sie versuchen, übergeordnete Layouthöhe zu setzen: Android: layout_height = "wrap_content" – gregaj

    +0

    Bitte post Ihre Layout-XML. – ScottishUser

    Antwort

    1

    Sorry für meine eigene Frage zu beantworten, aber ich wollte darauf hinweisen, dass @EpicPandaForce und @tommus mich in der richtigen Richtung. Ich habe die layout_height in der RecyclerView und die layout_height in RelativeLayout optimiert und das Problem scheint behoben zu sein.

    ging von zu wrap_content.

    Danke an alle.