2012-03-20 20 views
5

चूंकि बहुत से लोग अब तक कर रहे हैं, मैं अपने ऐप में फ्रैगमेंटटैब्स पेजर को कार्यान्वित कर रहा हूं, जो एक्शनबैरशॉक 4.0 का उपयोग कर रहा है। हालांकि, मैं खो गया हूँ।एक्शनबार शेरलॉक और फ्रैगमेंटटैब्स पेज

टुकड़े, और Google के सभी छोटे विचार, योजनाएं और इसके आस-पास के तरीके, मुझे भ्रमित कर रहे हैं। अगर कोई मेरे कोड को देख सकता है और मुझे इसके माध्यम से चल सकता है, तो इसे काम करने में मदद प्रदान करता है, मैं उन्हें हजारों बार धन्यवाद देता हूं: डी।

मेरे पास एक और प्रोजेक्ट है जो एक व्यूपेजर के लिए शुरुआत की तरह है, लेकिन टैब बस बेहतर मिश्रण करते हैं, खासकर उनके साथ लैंडस्केप और टैबलेट पर एक्शनबार में होते हैं। पहले से http://dl.dropbox.com/u/21807195/Antonius%20College%202.zip

धन्यवाद:

मेरे कोड सभी ज़िप किया गया और यहाँ पर जाने के लिए तैयार कर रहा है!

+1

https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabsPager.java –

उत्तर

6

मैं आपको अपना कोड दिखाऊंगा जिसमें एक व्यूपेगर, टैबलिस्टर और प्रत्येक टैब से जुड़े टुकड़ों की प्रणाली होगी। यह एबीएस को लागू करता है, लेकिन अभी तक के रूप में, अभी भी जिंजरब्रेड पर दुर्घटनाओं और कम (, आईसीएस पर खूबसूरती से काम करता है, हालांकि):

import java.util.ArrayList; 
import library.DatabaseHandler; 
import org.json.JSONObject; 
import com.actionbarsherlock.R; 
import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.MenuItem.OnMenuItemClickListener; 
import android.view.View.OnClickListener; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Switch; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 

public class Polling extends SherlockFragmentActivity { 
    private ViewPager mViewPager; 
    private TabsAdapter mTabsAdapter; 
    private final static String TAG = "21st Polling:"; 

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

     mViewPager = new ViewPager(this); 
     mViewPager.setId(R.id.pager); 
     setContentView(mViewPager); 
     ActionBar bar = getSupportActionBar(); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     bar.setDisplayShowTitleEnabled(false); 
     bar.setDisplayShowHomeEnabled(false); 

     mTabsAdapter = new TabsAdapter(this, mViewPager); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.login), 
       LoginFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.economics), 
       EconFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.elections), 
       ElectionsFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.politics), 
       PoliticsFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.science), 
       ScienceFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.finance), 
       FinanceFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.religion), 
       ReligionFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.military), 
       MilitaryFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.international), 
       InternationalFragment.class, null); 
     Log.v(TAG, (String)bar.getTabAt(0).getText()); 

    } 
public static class TabsAdapter extends FragmentPagerAdapter 
    implements ActionBar.TabListener, ViewPager.OnPageChangeListener { 
     private final Context mContext; 
     private final ActionBar mActionBar; 
     private final ViewPager mViewPager; 
     private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

     static final class TabInfo { 
      private final Class<?> clss; 
      private final Bundle args; 

      TabInfo(Class<?> _class, Bundle _args) { 
       clss = _class; 
       args = _args; 
      } 
     } 

     public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
      super(activity.getSupportFragmentManager()); 
      mContext = activity; 
      mActionBar = activity.getSupportActionBar(); 
      mViewPager = pager; 
      mViewPager.setAdapter(this); 
      mViewPager.setOnPageChangeListener(this); 
     } 

     public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
      TabInfo info = new TabInfo(clss, args); 
      tab.setTag(info); 
      tab.setTabListener(this); 
      mTabs.add(info); 
      mActionBar.addTab(tab); 
      notifyDataSetChanged(); 
     } 


     public int getCount() { 
      return mTabs.size(); 
     } 

     public SherlockFragment getItem(int position) { 
      TabInfo info = mTabs.get(position); 
      return (SherlockFragment)Fragment.instantiate(mContext, info.clss.getName(), info.args); 
     } 


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


     public void onPageSelected(int position) { 
      mActionBar.setSelectedNavigationItem(position); 
     } 


     public void onPageScrollStateChanged(int state) { 
     } 


     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      mViewPager.setCurrentItem(tab.getPosition()); 
      //Log.v(TAG, "clicked"); 
      Object tag = tab.getTag(); 
      for (int i=0; i<mTabs.size(); i++) { 
       if (mTabs.get(i) == tag) { 
        mViewPager.setCurrentItem(i); 
       } 
      } 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) {} 

     public void onTabReselected(Tab tab, FragmentTransaction ft) {} 

     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {} 

     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {} 
    } 

और यहाँ एक टुकड़ा कैसा दिखता है:

package com.davekelley.polling; 

import com.actionbarsherlock.R; 
import com.actionbarsherlock.app.SherlockFragment; 

import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class MilitaryFragment extends SherlockFragment { 

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

     return inflater.inflate(R.layout.militaryfragment, container, false); 
    } 
} 

मेरे पिछले टिप्पणी क्या मेरे कोड में अभी भी एक अन्य समस्या है: उपयोगकर्ता के पीछे वापस आने के बाद अलग-अलग टुकड़े अपने इंटरफ़ेस को फिर से लोड नहीं करते हैं (जिसके परिणामस्वरूप स्क्रीन से पूरे ऐप को हटाया जा सकता है, भले ही वे कौन सा टैब/टुकड़ा चालू हों, क्योंकि मेरे पास बैकस्टैक नहीं है) । तो यही वह है जो मैं अब के माध्यम से कर रहा हूँ। मुझे लगता है कि एक बार जब मैंने इसे हल किया है, तो मैं यह पता लगाने की कोशिश करूंगा कि क्यों अभी भी जिंजरब्रेड निष्पादन ठीक से काम नहीं कर रहा है। किसी भी तरह से, मुझे उम्मीद है कि इस कोड को देखकर आपकी मदद मिलती है।

यहाँ कुछ onClickListeners साथ एक टुकड़ा है:।

import com.actionbarsherlock.R; 
import com.actionbarsherlock.app.SherlockFragment; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 
import android.widget.Toast; 

public class LoginFragment extends SherlockFragment { 

    Button loginButton; 
    Button registerButton; 
    Polling activity; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.loginfragment, container, false); 

     return v; 
    } 

    public void onResume() { 
     super.onResume(); 
     Log.d("Econ", "onresume"); 

     loginButton = (Button) getActivity().findViewById(R.id.loginButton); 
     loginButton.setOnClickListener(loginListener); 
     registerButton = (Button) getActivity().findViewById(R.id.registerButton); 
     registerButton.setOnClickListener(registerListener); 

    } 

    public OnClickListener loginListener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(loginButton.getText().toString() == "Log Out") { 

       activity.loginReport(2); 
       loginButton.setText(R.string.login); 
       //Remove user from dB sqllite when I know how 
      } 
      else { 
      Log.v("LoginF", "onclick"); 
      ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
      progressDialog.setMessage("Logging in..."); 
      LoginTask loginTask = new LoginTask((Polling) getActivity(), progressDialog); 
      loginTask.execute(); 
      } 
     } 
    }; 


    public OnClickListener registerListener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      Log.v("Register", "onclick"); 
      ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
      progressDialog.setMessage("Registering new user..."); 
      RegisterTask registerTask = new RegisterTask((Polling) getActivity(), progressDialog); 
      registerTask.execute(); 
      } 

    }; 

    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     this.activity = (Polling) activity; 
    } 

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


    } 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 

    public void onStart() { 
     super.onStart(); 
     Log.d("Econ", "onstart"); 
    } 


    public void onPause() { 
     super.onPause();Log.d("Econ", "onpause"); 
    } 

    public void onStop() { 
     super.onStop(); 
     Log.d("Econ", "onstop"); 
    } 

    public void onDestroyView() { 
     super.onDestroyView(); 
     Log.d("Econ", "ondestroyview"); 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
     Log.d("Econ", "ondestroy"); 

    } 

    public void onDetach() { 
     super.onDetach(); 
     Log.d("Econ", "ondetach"); 
    } 

} 

loginTask वस्तुओं है कि आप देख वास्तव में कक्षाएं कि ASyncTask का विस्तार कर रहे हैं - वे मेरे सर्वर से कनेक्ट और दर्ज की संभाल/में प्रवेश

मैंने सोचा कोड के एक और अधिक में जोड़ने में मददगार होगा। यह लॉग इनफ्रैमेंट की तरह मेरे टुकड़ों में से एक है, लेकिन यह एक यूआई को थोड़ा अलग करता है।

public class EconFragment extends SherlockFragment { 

    private TableLayout questionContainer; 
    int pos = 0; 
    private String[] titles = {"The first title ", "hallo1","hallo2", "hallo3", 
      "hallo4", "hallo5","hallo6", "hallo7","hallo8", "hallo9"}; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.v("Econ", "onCreateView"); 
     View v = inflater.inflate(R.layout.econfragment, container, false); 
     questionContainer = (TableLayout) v.findViewById(R.id.questionContainer); 
     //bs 
     int leftMargin=5; 
     int topMargin=5; 
     int rightMargin=5; 
     int bottomMargin=5; 
     while (pos < 10) { 
     View question = inflater.inflate(R.layout.question, null); 
     question.setId(pos); 
     TextView title = (TextView) question.findViewById(R.id.questionTextView); 
     title.setText(titles[pos]); 
     Button charts = (Button) question.findViewById(R.id.chartsButton); 
     charts.setId(pos); 
     charts.setOnClickListener(chartsListener); 
     TableRow tr = (TableRow) question; 
     TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
       TableLayout.LayoutParams.MATCH_PARENT, 
       TableLayout.LayoutParams.WRAP_CONTENT); 
     trParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin); 
     tr.setLayoutParams(trParams); 
     Log.v("econ", "while loop"); 
     questionContainer.addView(tr); 
     pos++; 
     } 
     pos = 0; 
     return v; 
    } 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मैं आने वाले सप्ताह में इसे देख लूंगा (यदि मेरे पास समय है ...), और वापस रिपोर्ट करें। क्या आप मुझे बता सकते हैं कि जब आप सबकुछ काम करते हैं, और क्या किया जाना चाहिए? – DatBassie

+0

निश्चित रूप से। जिंजरब्रेड पर क्रैश होने का कारण यह है कि मैं स्विच विजेट का उपयोग कर रहा था, जिसे 3.0 या 4.0 में पेश किया गया था, इसलिए जिंजरब्रेड कोड चलाने का कोई तरीका नहीं था। मैंने उस चेकबॉक्स को स्विच किया, प्रोजेक्ट-> क्लीन चलाया, और यह ठीक काम किया। मैं अपने मूल पोस्ट में अपने टैब एडाप्टर कोड को शामिल करना भूल गया, इसलिए मैं इसे अभी संपादित कर दूंगा। – Davek804

+0

धन्यवाद! लेकिन आप फ्रैगमेंट में सभी क्लिक इत्यादि कैसे संभालते हैं? (हाँ, टुकड़े मुझे नरक की तरह भ्रमित करते हैं ...) – DatBassie

4

मैं FragmentTabsPager गतिविधि पोर्ट और से जुड़े टुकड़े है: अंत में, क्या आप नीचे दिए गए जबकि पाश में देखते हैं, बल्कि डमी स्ट्रिंग सरणी आप देख तुलना में, सर्वर से प्रत्येक प्रश्न के अधिग्रहण के लिए एक ASyncTask में सिर होगा ActionBarSherlock और सही एक्शनबार टैब का उपयोग करने के लिए "सपोर्ट 4 डेमोस" (एंड्रॉइड सपोर्ट लाइब्रेरी नमूना)। नमूना में ऐसी गतिविधि शामिल होती है जो Fragments के बीच स्विच करने के लिए व्यूपेगर और टैब दोनों का उपयोग करती है। टुकड़ों में तीन प्रकार के लिस्ट व्यू होते हैं। मैंने इसे आईसीएस से नीचे एक्लेयर (2.1) तक परीक्षण किया है। आप http://code.google.com/p/sherlock-demo/ पर कोड ब्राउज़ या डाउनलोड कर सकते हैं।

+0

क्या आप कुछ जगह कोड डाल सकते हैं क्योंकि मैं इसे वहां से डाउनलोड नहीं कर सकता। "इस परियोजना में वर्तमान में कोई डाउनलोड नहीं है।" –

+0

यहां स्रोत देखें: http://code.google.com/p/sherlock-demo/source/checkout यहां स्रोत ब्राउज़ करें: http://code.google.com/p/sherlock-demo/source/browse/ – Sparky

+1

क्या आप इसे अन्य सुविधाओं जैसे कि एडिटटेक्स्ट और बटन और लिस्टडिअलॉग के लिए भी कर सकते हैं? उन सभी के साथ परेशानी हो रही है ... बेशक, यह भविष्य के संदर्भ के लिए भी अच्छा है :)। – DatBassie