Я могу делать layouts с тем же именем и в то же время помещать им того же самого, пойдите, чтобы потом называть их?

Попробовав приспосабливать мое приложение к другим устройствам (tablets) он дает мне ошибку, из-за следующего, мой layout (который я назвал activity_wine_list) я считаю это приспособленным для различных ситуаций, это создал согласно ситуации формы или другой, этой формы:

Это для подвижного способа.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/background_material_dark"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:elevation="10dp"
        android:id="@+id/toolbar"/>

    <FrameLayout android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:id="@+id/list">

    </FrameLayout>


</LinearLayout>

Восток - для tablet вертикальный способ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/background_material_dark"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:elevation="10dp"
        android:id="@+id/toolbar"/>


    <FrameLayout android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:id="@+id/winery">

    </FrameLayout>


</LinearLayout>

И последний также для tablets, но горизонтальный способ:

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

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/background_material_dark"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:elevation="10dp"
        android:id="@+id/toolbar"/>


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

        <FrameLayout
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:id="@+id/list"/>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/winery"/>


    </LinearLayout>


</LinearLayout>

Они используют id "list" и id "winery", хорошо, итак, проблема состоит, в том, что заставив скроллировать приложение, он дает мне ошибку показывая мне, что он не находит id "list", не говорит мне, что что-либо на "winery" я понимаю, потому что мое первое условие состоит в том, чтобы проверять list.

Здесь код для активности:

public class WineListActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //This here, will choose one of the three options I have in R.layout.activity_wine_list.
        setContentView(R.layout.activity_wine_list);

        //Visible Toolbar.
        setSupportActionBar((Toolbar)findViewById(R.id.toolbar));

        FragmentManager fm = getSupportFragmentManager();
        //I ask if they have already the listFragment
        if (findViewById(R.id.list) != null) {
            Fragment listFragment = fm.findFragmentById(R.id.list);
            //If no exist, I created it.
            if (listFragment == null) {
                listFragment = new WineListFragment();
                //Once is created, now add the fragmentManager to it
                fm.beginTransaction().add(R.id.list, listFragment).commit();
            }
        }
        //Them, I goona do something like that but, with the winery.
        if (findViewById(R.id.winery) != null) {
            Fragment wineryFragment = fm.findFragmentById(R.id.winery);
            if (wineryFragment == null){
                //Set newInstance because my WineryFragment have it has as an argument
                wineryFragment = WineryFragment.newInstance(0);
                //And them, just the same.
                fm.beginTransaction().add(R.id.list, wineryFragment).commit();
            }
        }
    }
}


Aqui el codigo Fragment: 

public WineListFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View root = inflater.inflate(R.layout.fragment_wine_list, container, false);

        //Reference to ListView
        ListView listView = (ListView) root.findViewById(android.R.id.list);

        //Acceding Winery
        Winery winery = Winery.getInstance();

        //List adapter
        ArrayAdapter<Wine> adapter =  new ArrayAdapter<Wine>(getActivity(), android.R.layout.simple_list_item_1, winery.getWineList());

        //Saying the adapter to the listView
        listView.setAdapter(adapter);

        //What to do when the user press one item on the list.
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent wineryIntent = new Intent(getActivity(), WineryActivity.class);
                wineryIntent.putExtra(WineryActivity.EXTRA_WINE_INDEX, i);
                startActivity(wineryIntent);
            }
        });

        return root;
 }

}

И в конце концов код, откуда я достаю постоянные величины:

public class WineryFragment extends Fragment implements ViewPager.OnPageChangeListener {

    public static final String ARG_WINE_INDEX ="jhon.casique.baccus.controller.fragment.WineryFragment.ARG_WINE_INDEX";

    private ViewPager mPager = null;
    private ActionBar mActionBar = null;
    private Winery mWinery = null;

    //Creating new method to access him from WineryActivity. (newInstance)
    public static WineryFragment newInstance(int wineIndex){
        Bundle arguments = new Bundle();
        arguments.putInt(ARG_WINE_INDEX, wineIndex);
        WineryFragment fragment = new WineryFragment();
        fragment.setArguments(arguments);

        return fragment;
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         super.onCreateView(inflater, container, savedInstanceState);

        View root = inflater.inflate(R.layout.fragment_winery, container, false);

        mPager = (ViewPager) root.findViewById(R.id.pager);
        mPager.setAdapter(new WineryPagerAdapter(getFragmentManager()));

        mWinery = Winery.getInstance();

        //Getting reference about the ActionBar
        mActionBar = (ActionBar) ((AppCompatActivity)getActivity()).getSupportActionBar();
        //Listener.
        mPager.addOnPageChangeListener(this);

        //This value is for rotate the pageView and the ActionBar
        int initialWineIndex = getArguments().getInt(ARG_WINE_INDEX);
        //I ask to update my ActionBar and pageView to charge the wine it is pass as a argument.
        mPager.setCurrentItem(initialWineIndex);
        updateActionBar(initialWineIndex);

        return root;
    }

    //Creating method to update my data page wine (I gonna need a Winery)
    public void updateActionBar (int index) {
        mActionBar.setTitle(mWinery.getWine(index).getName());
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        //Changing by position in the PageView name by name.
        updateActionBar(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_winery, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        boolean superValue = super.onOptionsItemSelected(item);

        if (item.getItemId() == R.id.menu_next && mPager.getCurrentItem() < mWinery.getWineCount() -1) {
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            return true;
        }
        else if (item.getItemId() == R.id.menu_prev && mPager.getCurrentItem() > 0) {
            mPager.setCurrentItem(mPager.getCurrentItem() -1);
            return true;
        }
        else {
            return superValue;
        }
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        MenuItem menuNext = menu.findItem(R.id.menu_next);
        MenuItem menuPrev = menu.findItem(R.id.menu_prev);

        //Setting when they gonna be enabled.
        menuNext.setEnabled(mPager.getCurrentItem() < mWinery.getWineCount() - 1);
        menuPrev.setEnabled(mPager.getCurrentItem() > 0);
    }
}

Если кто-то может помогать мне, он ему был бы благодарен за это много.

Спасибо.

Обновленный 28/10

Я благодарен за Вашу помощь но, все же это продолжает давать мне ошибку, в частности этот: ФАТАЛЬНЫЙ EXCEPTION: main Process: jhon.casique.baccus, PID: 2238 java.lang. RuntimeException: Unable to start activity ComponentInfo { jhon.casique.baccus/jhon.casique.baccus.controller.activity. WineListActivity }: java.lang. IllegalArgumentException: Не view found for пойдите 0x7f0b0057 (jhon.casique.baccus:id/list) for fragment WineryFragment { a50a4b98 #0 id=0x7f0b0057 }

В пользу какого-то мотива id "list" это не распознает и не имеет значения, если я делаю ему перефактор, или сделайте то, что он делает, не хоти функционировать. Я не понимаю, что он перемещает демоны.

4
задан 28.10.2016, 12:57
2 ответа

я Могу делать layouts с тем же именем и в то же время помещать им того же самого, пойдите, чтобы потом называть их?

Только, если они находятся в различном folder, определенном из-за различного tamaГ±o.

Например layout для вертикального способа agregarГ - в в /layout для горизонтального способа /layout-land:

introducir la descripción de la imagen aquí

Цензоры для этих имен folders, -

для OrientaciГіn :

land Ресурсы для экранов в ней orientaciГіn горизонтальный (relaciГіn аспекта).

port Ресурсы для экранов в ней orientaciГіn вертикальный (relaciГіn аспекта высоты).

для TamaГ±o :

small Ресурсы для экранов pequeГ±o tamaГ±o.

normal Ресурсы для экранов tamaГ±o регулировать. (Эта та lГ-nea основания tamaГ±o.)

large Ресурсы для экранов большого tamaГ±o.

xlarge Дополнительные большие ресурсы для экранов tamaГ±o.

Например:

Предполагая ты хочешь определить дополнительный большой layout для экранов tamaГ±o и единственно в orientaciГіn горизонтально, agregarГ-схвати это внутри folder:

/ layout-xlarge-land

Только для экранов tamaГ±o большой и одинокий в orientaciГіn вертикальный, agregarГ-эксперт aquГ - твой layout:

/ layout-large-port


Из другой формы, если то, что ты хочешь, состоит в том, чтобы загружать несколько layouts:

  • способ mГіvil.
  • Tablet вертикальный способ.
  • Tablet горизонтальный способ.

TendrГ-Схвати, что определять их, позвонив mГ©todo setContentView (), но tendrГ-an, чем называться различным:

 if(!isTablet){ //móvil.
    setContentView(R.layout.activity_wine_list);
 }else{ //Tablet    
    setContentView(R.layout.activity_wine_list_tablet);
 }
4
ответ дан 24.11.2019, 12:53
  • 1
    Я могу в и # 241; adir в твой ответ добавляя, что в documentaci и # 243; n они это объясняют хорошо! developer.android.com/training/multiscreen/… –  sioesi 27.10.2016, 23:34
  • 2
    Если просвет, он приходит в и # 250; n м и # 225; s определенная с folder layout tama и # 241; вы –  Jorgesys♦ 27.10.2016, 23:53
  • 3
    Большое спасибо ты был очень много помощи. Мне удалось сделать это. –  Jhon 01.11.2016, 14:39
  • 4
    @Jhon, если этот ответ ayudó чтобы решать проблему твоего вопроса, пожалуйста считай принимать кликая в вњ” пёЏ , что está под стрелами votació n, слева от той же самой (на тебя не делает скидку ничто поэтому - все противоположность, оба извлекают пользу). –  Mariano 10.01.2017, 08:25

Как таковой id представляет идентификатора Гєnico, поэтому у каждого layout должен быть один пойдите Гєnico. Кроме того, если ты повторяешь, они пойдите android он не сможет отличаться между различными компонентами, в файле R ресурсов.

0
ответ дан 24.11.2019, 12:53
  • 1
    Верный, но существуют моменты d и # 243; nde у тебя есть несколько layouts для каждого типа м и # 243; подлый тогда im и # 225; ginate aplicaci и # 243; n в tablet и в одном м и # 243; подлый согрешите и # 241; или layout tendr и # 237; в который отличаться для обоих а aplicaci и # 243; n не tendr и # 237; в хороший интерфейс и #243; хуже даже, плохой опыт пользователя –  marlonpya 28.10.2016, 18:09
  • 2
    Большое спасибо обоим из-за того, что я отвечаю, я смог решать тему с вашими ответами. –  Jhon 01.11.2016, 14:40