2015-12-14 2 views
0

Я новичок в Android, но знаю, как работать с Java, поэтому мне просто нужна помощь в некоторых частях макета моего приложения.Калибровка вкладок и фрагментов андроида

В принципе, я хочу иметь 4 вкладки в верхней части приложения (это я сделал), и при нажатии на каждый из них будет отображаться другой фрагмент (очень новый, так что это может быть неверно), который будет служить другой цели ,

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

Во-вторых, как бы у меня появлялись разные фрагменты при нажатии на соответствующую вкладку (например, нажатие «MEDIA REMOTE» откроет mediaRemoteFragment). Это приложение будет клиентом, так что основная часть (MainActivity.java ??) понадобится для работы в фоновом режиме, а затем фрагменты отправят сообщения на главную, которые затем отправят эти сообщения на сервер.

Извините, если это немного непонятно ...

Вот мой текущий код:

MainActivity.java:

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTabHost; 

import layout.FragmentTab; 

public class MainActivity extends FragmentActivity { 
    private FragmentTabHost mTabHost; 

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

     setContentView(R.layout.activity_main); 
     mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("keyboardTab").setIndicator("Keyboard", null), FragmentTab.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("mediaRemoteTab").setIndicator("Media Remote", null), FragmentTab.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("mouseTab").setIndicator("Mouse", null), FragmentTab.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("settingsTab").setIndicator("Settings", null), FragmentTab.class, null); 

    } 
} 

FragmentTab.java:

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import kaihulme.tabs.R; 

public class FragmentTab extends Fragment { 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_layout, container, false); 
     TextView tv = (TextView) v.findViewById(R.id.text); 
     tv.setText(this.getTag() + " Content"); 
     return v; 
    } 
} 

activity_main .xml:

<android.support.v4.app.FragmentTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom"/> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</android.support.v4.app.FragmentTabHost> 

fragment_layout.xml:

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

    <TextView 
     android:id="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical|center_horizontal" 
     android:text="hello_world" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</LinearLayout> 

ответ

0

Я видел ваши макеты, они Rigth для меня. Сначала вам нужно будет создать 4 фрагмента. Вам нужно будет реализовать список onClik() listenert на вкладках, чтобы следить за этим процессом: при нажатии вкладки фактический fragment должен исчезнуть, поэтому его необходимо удалить и создать новый файл и вставить его на FrameLayout. Для этой цели вы можете использовать метод replace().

Шаблон фрагмента, который автогенерирует андроид-студию, очень полезен. И здесь у вас есть много информации для работы с фрагментами: http://developer.android.com/intl/es/guide/components/fragments.html

Самого главного это: Если вам необходимо заменить фрагмент, удалить старый фрагмент и создать новый с newInstance() методами предоставленного андроидом студией, что вам должны измениться в соответствии с вашими потребностями.

KeyboardFragment mFrag = KeyboardFragment.newInstace(arg1, arg2);

Вы можете вызывать методы осколочных сберегательных экземпляр созданного фрагмента:

mFrag.myMethod();

Но вы не должны вызывать методы активности из фрагмента.Для того, чтобы обмениваться информацией, обратите внимание на какое-то событие, и т.д. Вы должны использовать интерфейс, как описано в предыдущей статье:

public static class FragmentA extends ListFragment { 
    OnArticleSelectedListener mListener; 
    ... 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (OnArticleSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener"); 
     } 
    } 
    ... 
} 

Деятельность должна реализует этот интерфейс, а затем вы можете вызывать методы интерфейса, чтобы сообщить фрагмент с контейнерной деятельности.

Надеюсь, что это поможет начать вашу работу.

+0

Благодарим за отзыв - я попробую это –

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