Показать разные макеты в фрагментации - PullRequest
3 голосов
/ 03 января 2012

У меня проблема с тем, что я хочу загружать разные макеты каждый раз во фрагменте, когда элемент списка выбирается из другого фрагмента.Означает, что у меня есть два фрагмента на экране, первый из которых - ListView, а с другой - я хочу показать различные макеты в соответствии с выбранным элементом из списка. Это означает, что если я щелкнул элемент «О нас», то на панели «Детали» отображается макет «О нас» и «Если щелкнули».на Свяжитесь с нами, панель подробностей будет изменена на соответственно.В настоящее время макет показывает изображения, которые создаются во время выполнения.Пожалуйста, предложите мне правильный результат.

Моя основная деятельность:

public class FragmentTestActivity extends Activity implements OnItemClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView l = (ListView) findViewById(R.id.number_list);
        ArrayAdapter<String> numbers = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_1, 
                new String [] {
            "About US", "Contact Us", "Services", "four", "five", "six"
        });
        l.setAdapter(numbers);
        l.setOnItemClickListener(this);
    }

    /**
     * Add a Fragment to our stack with n Androids in it
     */
    private void stackAFragment(int nAndroids) {
        Fragment f = new TestFragment(nAndroids);

        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.the_frag, f);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.addToBackStack(null);
        ft.commit();
    }

    /**
     * Called when a number gets clicked
     */
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        stackAFragment(position);
    }
}

Подробности Область:

public class TestFragment extends Fragment {
    private int nAndroids;

    public TestFragment() {

    }

   /**
    * Constructor for being created explicitly
    */
   public TestFragment(int nAndroids) {
        this.nAndroids = nAndroids;
    }

    /**
     * If we are being created with saved state, restore our state
     */
    @Override
    public void onCreate(Bundle saved) {
        super.onCreate(saved);
        if (null != saved) {
            nAndroids = saved.getInt("nAndroids");
        }
    }

    /**
     * Save the number of Androids to be displayed
     */
    @Override
    public void onSaveInstanceState(Bundle toSave) {
        toSave.putInt("nAndroids", nAndroids);
    }

    /**
     * Make a grid and fill it with n Androids
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
        int n;

        Context c = getActivity().getApplicationContext();
        LinearLayout l = new LinearLayout(c);

        for (n = 0; n < nAndroids; n++) {
            ImageView i = new ImageView(c);
            i.setImageResource(R.drawable.android);
            l.addView(i);
        }
        return l;
    }
}

1 Ответ

0 голосов
/ 01 августа 2014

Вам, вероятно, будет лучше (более чистый дизайн), если вы используете отдельные Fragments для различных типов данных, которые вы представляете. Это обеспечит чистоту вашего Fragments, а Activity может просто создать соответствующий Fragment и заменить предыдущий в представлении контейнера. Однако, если вы действительно хотите сделать это так, как вы описали, вы можете передать "режим" в Fragment через аргумент Bundle, и Fragment может использовать эту информацию для раздувания соответствующий файл макета и логика.

См. Это руководство разработчика для получения подробной информации и примеров с использованием аргументов и фрагментов: http://developer.android.com/training/basics/fragments/fragment-ui.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...