2016-12-19 4 views
0

У меня довольно неприятная проблема с использованием вкладок в android. Я не уверен, как они работают, проблема, с которой я сталкиваюсь, - это знать, где поставить логику моего кода. например, на первой вкладке я хотел применить календарь, а вторая вкладка загрузила файл, например, где бы я поместил эту логику, у меня есть 3 xml фрагменты, и до сих пор я пытался закодировать логику с помощью onCreateView. Если бы кто-нибудь мог объяснить, как работает вкладка, я буду вечно благодарен, я использовал установленную по умолчанию андроид для работы с вкладками и добавил 3 фрагмента.Где я должен поместить свой код при использовании активности с вкладками?

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 

       if(getArguments().getInt(ARG_SECTION_NUMBER)==1) { 

        View rootView = inflater.inflate(R.layout.fragment_message, container, false); 

        return rootView; 

       } 
else if(getArguments().getInt(ARG_SECTION_NUMBER)==2){ 
        View rootView = inflater.inflate(R.layout.fragment_read, container, false); 
        TextView textView= (TextView)rootView.findViewById(R.id.textView_two); 
        textView.setText("Working"); 

        return rootView; 
       } 
else{ 
        View rootView = inflater.inflate(R.layout.fragment_calendar, container, false); 
       // would I put my logic here? 

        return rootView; 
       } 
      } 
     } 

Update 2 Так что теперь я пытаюсь слушать нажатие кнопок и показать тост на одном из фрагментов, кнопка не реагирует и Тосты не появляются.

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
// Inflate the layout for this fragment 
final View rootView=inflater.inflate(R.layout.fragment_calendar, container, false); 

    //final ActionBar actionBar = getSupportActionBar(); 
    //actionBar.setDisplayHomeAsUpEnabled(false); 
    //actionBar.setTitle(null); 
    //Toast.makeText(getActivity(),"AKHBKH",Toast.LENGTH_LONG).show(); 
    Button button1=(Button)rootView.findViewById(R.id.button_test1); 
    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.i("",""); 
      Toast.makeText(getActivity(),"ddfdf",Toast.LENGTH_LONG).show(); 
     } 
    }); 

PS я попытался все это на Toast getActivity() getActivity(). GetApplicationContext() getBaseContext() getContext()

+0

не уверен, где выше код помещается, но я думаю, что лучший подход для этого случая иметь одну активность и несколько фрагментов (по одной для каждой вкладки) и использовать «FragmentPagerAdapter» или «FragmentStatePagerAdapter» для отображения фрагментов (вкладок), теперь ясно, что код будет помещен в каждый фрагмент (каждый фрагмент содержит собственный код/logic) – Yazan

ответ

0

Вы можете взять три фрагмента и всю логику вы хотите реализовать должен быть в каждом из фрагмент, соответственно. Возьмите MainActivity, чтобы просмотреть все фрагменты. Здесь я поделюсь своей частью кода.

MainActivity

public class MainActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 



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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
} 


private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new Admin(), "ADMIN"); 
    adapter.addFragment(new Faculty(), "FACULTY"); 
    adapter.addFragment(new Student(), "STUDENT"); 
    viewPager.setAdapter(adapter); 
} 

//---------------------------------------------------------------------------------------------- 
class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

@Override 
public void onBackPressed(){ 
    //Do Here what ever you want do on back press; 

} 

} 

Я поделюсь код любого из фрагментов: Администратор

public class Admin extends Fragment { 
EditText aid; 
EditText apassword; 
Button submit1,changepass; 

String id = null, pass = null; 
String table = null; 


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

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



} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View rootView=inflater.inflate(R.layout.fragment_admin, container, false); 


    aid=(EditText)rootView.findViewById(R.id.admin_id); 
    apassword=(EditText)rootView.findViewById(R.id.admin_password); 
    changepass=(Button)rootView.findViewById(R.id.changePass); 
    submit1=(Button)rootView.findViewById(R.id.submit1); 

    submit1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      submit1(); 
     } 
    }); 

    changepass.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent in=new Intent(getActivity(),ChangePassword.class); 
      startActivity(in); 
     } 
    }); 
    // Inflate the layout for this fragment 
    return rootView; 

    } 


//For Admin login Authentication 
public void submit1() { 
    id = aid.getText().toString(); 
    pass = apassword.getText().toString(); 
    Log.d("id", id); 
    Log.d("pass", pass); 
    table="admin"; 
    // new ExecuteTask().execute(id, pass, table); 
}} 
+0

Спасибо, что это помогло, j У вас еще несколько проблем, кажется, что мои тосты не отображаются, а также мои кнопки не исполняются. Я сделал то, что вы сделали, поместив код в свой фрагмент. – cryax

+0

Вы получаете какую-либо ошибку или что? –

+0

Нет ошибки, я пытаюсь прослушать кнопку, которую я объявил на одном из фрагментов, которые я использовал, код, который вы предоставили, но кнопку, не отвечающую. В onCreateView. Я обновлю свой вопрос, показывая код. – cryax

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