2016-07-21 3 views
0

У меня есть два макета table.xml (порт) и table.xml (земля), который оттуда именует один из ландшафтов и другой для protrait.на кнопке изменения ориентации touchlistener не работает

enter image description here

я включил этот макет в другой макет называется fragment_test.xml так:

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

    <include layout="@layout/table"/> 

    </RelativeLayout> 

и это мой фрагмент кода приведенного выше макета fragment_test:

public class Fragment_test extends Fragment implements View.OnTouchListener{ 
    @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 



     mytable= (LinearLayout) getActivity().findViewById(R.id.mytableid); 
     typeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/font.ttf"); 

        for (int i = 0; i < table1.getChildCount(); i++) { 
        LinearLayout mychild = (LinearLayout) mytable.getChildAt(i); 
        for (int j = 0; j < mychild.getChildCount(); j++) { 
         Button b = (Button) child.getChildAt(j); 
         b.setTypeface(typeface); 
         b.setOnTouchListener(this); 
        } 

       } 
      } 

     } 


     //this is called when a button is touched 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
    return true; 
    } 

} 

поэтому в основном у меня есть несколько кнопок в макете таблицы, я перехожу к setontouchlistener для каждого из них. поэтому моя проблема заключается в том, что я переключаюсь с protrait на пейзаж или наоборот, touchlistener кнопки больше не работает, и даже шрифт больше не работает при изменении макета.

> Edit: это код активности

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle("Home"); 


     FragmentManager manager = getFragmentManager(); 
     manager.beginTransaction().add(R.id.container, new Fragment_test(), "mytag").commit(); 




    } 
+0

Почтовый индекс активности –

+0

я добавил код активности, но я не думаю, Thats, связанные с тех пор я отлаживается код и фрагмент onActivityCreated становится называемый обычно всякий раз, когда я изменил ориентацию – has19

+0

Где 'table1' приходит, и что размер дочернего счета на каждом повороте? –

ответ

1

Попробуйте позвонить setRetainInstance(true) после super.onActivityCreated(savedInstanceState);

here is the documentation of setRetainInstance(boolean)

активность:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 

    FragmentManager manager = getSupportFragmentManager(); 
    Fragment myFragment = manager.findFragmentByTag("myFragment"); 
    if (myFragment == null) { 
     myFragment = new ParentFragment(); 
    } 

    manager.beginTransaction().add(R.id.fragmentHolder, myFragment, "myFragment").commit(); 
} 
} 

Fragm ent:

public class ParentFragment extends Fragment{ 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    setRetainInstance(true); 
} 
} 
+0

это не сработало, – has19

+0

ваш @ layout/table. –

+2

@ has19 'setRetainInstance (true)' fail, поскольку вы добавляете новый экземпляр фрагмента каждый раз, когда вызывается callCreate (каждое вращение). В хостинговой деятельности найдите фрагмент через свой тег, если null, создайте новый экземпляр, затем начните транзакцию с использованием нового фрагмента или текущего экземпляра фрагмента. –

0

Я просто даю вам информацию.

Вы можете проверить Orientataion устройства таким образом и установить его расположение.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ 
     setContentView(R.layout.table_horizontal); 
     button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    }else if (newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){ 
     setContentView(R.layout.table_vertical); 
     button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    } 
} 
+0

, но этот код работает только для действий, а не фрагментов – has19