2012-11-02 42 views
8

Tôi đã thiết kế RelativeLayout. Tôi đang cố thêm mảnh vỡ vào nó. Nó trùng lặp. Tôi cần làm gì để nó có một cái dưới đây.Cách thêm phân đoạn theo chương trình trong relativelayout

FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 

    FragmentTest myFragment = new FragmentTest(); 
    t.add(layout.getId(), myFragment, "myFirstFragment"); 

    FragmentTest myFragment2 = new FragmentTest(); 
    t.add(layout.getId(), myFragment2, "mySecondFragment"); 

    t.commit(); 

// Chế độ xem myFragment và myFragment2 chồng chéo mặc dù tôi đã đặt hướng dọc.

<RelativeLayout 
    android:id="@+id/idll1" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10sp" 
    android:layout_marginRight="0sp" 
    android:layout_marginTop="10sp" 
    android:layout_weight="1" 
    android:paddingBottom="5dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="5dp" 
    android:paddingTop="5dp" 
    android:orientation="vertical"/> 

Trả lời

0

Tôi nghĩ rằng nó phải được LinearLayout

+0

Điều gì xảy ra khi tôi sử dụng LinearLayout sau dòng t.commit(); Tôi cố gắng thêm nút. layout.addView (nút). Sau đó, nút được định vị ở trên cùng, sau đó 2 mảnh đi xuống. Tôi hy vọng rằng 2 lượt xem phân đoạn xuất hiện hàng đầu theo thứ tự hoặc bổ sung và sau đó là nút. Nhưng theo cách đó nó không xảy ra. Có suy nghĩ gì không? – Satish

2

Bạn phải thiết lập prarams bố trí trong quan điểm của Fragment của bạn.

Có phải là XML hoặc hardCode không?

Nếu chúng là hardcode, bạn sẽ phải lấy FrameLayout Wrapper mà Google đặt trên tất cả các khung nhìn của fragment bằng thư viện hỗ trợ tương thích ngược và đặt tham số relativelayout của nó trong chế độ onlayout hoặc onMeasure.

Nếu không, nếu chúng là XML, chỉ cần đặt các quy tắc tương đối.

4

Chúng ta có thể làm điều đó như sau:

Hoạt động lớp, trong đó bố trí tương đối là hiện tại. Hãy để bố cục tương đối đó (mParentLayout) là phần tử gốc của phân cấp khung nhìn của hoạt động. Và phân đoạn được thêm vào bố cục tương đối sẽ là mGridFragment ở vị trí bên dưới Nút (mGridBtn).

public class DroidOpsActivity extends FragmentActivity implements 
    OnClickListener { 

    private RelativeLayout mParentLayout = null; 
    private Button mGridBtn = null; 
    private FragmentManager mFragmentMgr = null; 
    private FragmentTransaction mFragmentTransc = null; 
    private Fragment mGridFragment = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initialize(); 
    } 

    private void initialize() { 
     setContentView(R.layout.activity_droid_ops); 
     mParentLayout = (RelativeLayout) findViewById(R.id.parent_layout); 
     mGridBtn = (Button) findViewById(R.id.grid_button); 
     mFragmentMgr = getSupportFragmentManager(); 
     registerListener(); 
    } 

    private void registerListener() { 
     mGridBtn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.grid_button: 
        loadFragment(); 
        mGridBtn.setEnabled(false); 
     break; 
     } 
    } 

    private void loadFragment() { 
     mGridFragment = new DroidOpsFragments(); 
     mFragmentTransc = mFragmentMgr.beginTransaction(); 
     mFragmentTransc.add(mParentLayout.getId(), mGridFragment); 
     mFragmentTransc.addToBackStack(null); 
     mFragmentTransc.commit(); 
    } 

    public RelativeLayout.LayoutParams fetchLayoutParams() { 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

     // We can add any rule available for RelativeLayout and hence can position accordingly 
     params.addRule(RelativeLayout.BELOW, mGridBtn.getId()); 
     return params; 
    } 
} 

tương ứng lớp Fragment mà là để được vị trí với trong cách bố trí của hoạt động.

public class DroidOpsFragments extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.view_word_grid, null); 

     // Here we are fetching the layoutParams from parent activity and setting it to the fragment's view. 

     view.setLayoutParams(((DroidOpsActivity) activity).fetchLayoutParams()); 
     return view; 
    } 

} 
+0

Cảm ơn. Tôi không có thời gian để kiểm tra điều này vì tôi tạm thời rời khỏi dự án này. Nhưng chắc chắn tôi sẽ kiểm tra điều này và nếu nó hoạt động tôi sẽ chấp nhận câu trả lời của bạn. – Satish

0

Nhanh chóng và bẩn có vẻ là một chút tốt hơn. Nếu bạn biết bố trí của bạn đã được bạn có thể tiết kiệm một số bước, và tôi biết một người khổng lồ nếu (X instanceof Class) tập hợp các khối được cau mày trên, nó là khá linh hoạt.

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

     ViewGroup.LayoutParams p = view.getLayoutParams(); 
     if (p instanceof CoordinatorLayout.LayoutParams) { 
      CoordinatorLayout.LayoutParams params = ((CoordinatorLayout.LayoutParams)p); 
      params.gravity = Gravity.END | Gravity.BOTTOM; 
      view.setLayoutParams(params); 
     } 
     else if (p instanceof RelativeLayout.LayoutParams) { 
      RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)p); 
      params.addRule(RelativeLayout.ALIGN_BOTTOM); 
      view.setLayoutParams(params); 
     } 
} 
Các vấn đề liên quan