2015-01-27 3 views
0

Я использую Fragment внутри Activity, а ListView находится внутри моего Fragment.ListView внутри Фрагмент внутри Activity is not match_parent-ing?

Я установил все на match_parent, но это работает так, как я не ожидаю.

Пожалуйста, обратитесь к этому изображению для лучшего понимания http://i.imgur.com/2EK6qzs.jpg (не хватают репутаций =. = Не может изображения)

Чтобы сохранить наше время, я опустил большую часть ненужного кода, если я вам понадобится, чтобы обеспечить более коды, пожалуйста, скажите мне.

Спасибо.


activity_book_information.xml

<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" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin"> 

... 

<!-- Fragments --> 
<ScrollView 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/horizontal_line2" /> 
</RelativeLayout> 

fragment_book_review.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<Button 
    android:id="@+id/button_reviewAddReview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/bookInfo_addReview"/> 

<ListView 
    android:id="@+id/list_review" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
</LinearLayout> 

list_review_single.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/list_row_curve_rectangle_box"> 

<!-- Name --> 
<TextView 
    android:id="@+id/book_reviewName" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:text="Name"/> 

    ... 
</LinearLayout> 

Java

BookInformationActivity.java

public class BookInformationActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     setContentView(R.layout.activity_book_information); 

     f_manager = getFragmentManager(); 
     f_transaction = f_manager.beginTransaction(); 
     f_transaction.replace(R.id.scrollView, new BookReviewFragment(), "f_bookReview"); 
     f_transaction.commit(); 
    } 
    ... 
} 

BookReviewFragment.java

public class BookReviewFragment extends Fragment { 

    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     this.activity = activity; 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     bundle = this.getArguments(); 
     return inflater.inflate(R.layout.fragment_book_review, container, false); 
    } 

    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     list = (ListView) activity.findViewById(R.id.list_review); 
     new GetReviewTask().execute(); 
    } 

    public class GetReviewTask extends AsyncTask<Void, Void, Boolean> { 

     protected void onPreExecute() { 
      ... 
     } 

     protected Boolean doInBackground(Void... params) { 
      ... 
     } 

     protected void onPostExecute(Boolean aBoolean) { 
      super.onPostExecute(aBoolean); 

      if(aBoolean != null) { 

       ListAdapter adapter = new GetReviewAdapter(activity.getApplicationContext(), R.layout.list_review_single, reviewList); 
       list.setAdapter(adapter); // TODO : Fix Layout issue 
      } 
     } 
    } 
} 
+0

Опубликовать свою активность_book_information.xml. Вам нужно посмотреть, где находится ваш f_bookReview. – tachyonflux

+0

@tachonflux первый xml является «activity_book_information.xml», f_bookReview - это всего лишь «тег». – user2234894

+0

oh whoops, почему вы используете ScrollView как фрагмент? – tachyonflux

ответ

0

Почему Вы добавляете свой фрагмент внутри ScrollView ?? Измените этот вид прокрутки на LinearLayout или RelativeLayout, и все будет хорошо.

ScrollView и ListView не могут нормально работать вместе. У обоих есть своя собственная прокрутка.

Обход (но не является хорошим способом)

Но если в любом случае вы хотите сделать это, то сделать это в вашем фрагменте, я бы не советовал, хотя он.

public void setListViewHeightBasedOnChildren() 
{ 
    float offset = 1; 

    BaseAdapter listAdapter = (BaseAdapter) gridView.getAdapter(); 
    int totalHeight = 0; 
    final float scale = getResources().getDisplayMetrics().density; 
    ViewGroup.LayoutParams params = gridView.getLayoutParams(); 
    for(int i = 0; i < listAdapter.getCount(); i++) 
    { 
     View listItem = listAdapter.getView(i, null, gridView); 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight() + (offset * scale); 
    } 
    params.height = (int) (totalHeight + (offset * scale * (listAdapter.getCount() - 1))); 
    gridView.setLayoutParams(params); 
} 
+0

Я изменил' ScrollView' на 'LinearLayout' и работает как ожидалось. Большое спасибо. – user2234894

+0

У меня есть несколько просмотров внутри моего Scrollview, включая список, поэтому мне нужно использовать Scrollview – Mike6679

+0

Два прокручиваемых друг друга представления не являются хорошей идеей. – Rohit5k2

0

Попробуйте установить на LinearLayout weightSum: "7" атрибут в вашем XML, а затем layout_weight = "1" для кнопки и layout_weight = "6" для ListView (при условии, что вид списка имеет 6/7 пространства).

+0

Это не проблема. Это не поможет. – Rohit5k2

Смежные вопросы