2016-12-19 2 views
0

私はアンドロイドのタブを使用してかなり厄介な問題を抱えています。どのように動作するのか分かりません。問題は自分のコードのロジックをどこに置くべきかを知ることです。たとえば、最初のタブではカレンダーを適用し、2番目のタブにはファイルをアップロードしたいとします。たとえば、このロジックを配置する場所はどこですか?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; 
       } 
      } 
     } 

アップデート2 は、だから今、私はボタンの押下をリッスンし、断片の一つに乾杯を表示しようとしている、ボタンが応答しないとトーストは表示されません。私はトースト getActivity(上のすべてのこれらを試してみました

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) getActivityは()。getApplicationContext() getBaseContext() のgetContext()

+0

わからないが、私はこのような場合のために最善のアプローチがあると思います1つのアクティビティと複数のフラグメント(各タブに1つ)を持ち、 'FragmentPagerAdapter'または' FragmentStatePagerAdapter'を使ってフラグメント(タブ)を表示すると、コードは各フラグメントに配置されます/ロジック) – Yazan

答えて

0

: あなたはFragmentActivityからあなたの活動をfragments.ExtendともActionBar.TabListener

このチュートリアルを参照してください実装3を作成する必要がありますそれぞれ断片。 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; 

} 

} 

MainActivity:上記のコードが置かれている管理

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

いいえ、エラーはありません、私はあなたが提供したコードを使用したフラグメントの1つで宣言したボタンをリスンしようとしていますが、応答しないボタンはありません。 onCreateViewの下にあります。コードを示す私の質問を更新します。 – cryax

関連する問題