5

साथ नहीं संगत अच्छी तरह से करता है।एंड्रॉयड - समर्थन पुस्तकालय से टुकड़ा समर्थन पुस्तकालय का उपयोग करते समय मैं एक अजीब समस्या का सामना 4.3 मंच


मैं बस की तरह क्या API Demo किया था, 2.3.3 मंच पर स्विचन टुकड़े के साथ एक गतिशील नेविगेशन टैब बनाना चाहते हैं।

enter image description here


सब कुछ 2.3.3 मंच पर ठीक हो जाता है, लेकिन जब मैं 4.3 मंच पर एक ही गतिविधि पर एक दृष्टि डाली, मुझे लगता है कि कुछ काफी अजीब पाया।

SupportFragmentManagement टुकड़ा अलग नहीं कर सकते, टैब का चयन कॉलबैक सही ढंग से निष्पादित नहीं हुआ की तरह लगता है;

निम्नलिखित चित्रों को दिखाने के कैसे मेरे डेमो enter image description here

जाने के लिए और यहाँ मेरे कोड है:

package net.zengweizhi.android.gettingstarted.lesson05.test; 
import net.zengweizhi.android.gettingstarted.R; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

// समर्थन पुस्तकालय से एपीआई का उपयोग कर

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBar.Tab; 
import android.support.v7.app.ActionBar.TabListener; 
import android.support.v7.app.ActionBarActivity; 
public class NavigationTabsWithFragmentsV9 extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_navigation_tabs, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.actionButton_addTab: 
      addTab(); 
      break; 
     case R.id.actionButton_removeTab: 
      removeTab(); 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    private int mTabSeq = 0; 

    private void addTab(){ 
     getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mTabSeq++; 

     Tab tab = getSupportActionBar().newTab(); 
     tab.setText("TAB " + mTabSeq); 
     tab.setTabListener(new MyTabListener(this)); 
     getSupportActionBar().addTab(tab); 
    } 

    private void removeTab(){ 
     Tab tab = getSupportActionBar().getSelectedTab(); 
     getSupportActionBar().removeTab(tab); 

     Fragment fragment = getSupportFragmentManager().findFragmentByTag(tab.getText().toString()); 
     getSupportFragmentManager().beginTransaction().remove(fragment).commit(); 
     if(getSupportActionBar().getTabCount() == 0){ 
      getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     } 
    } 

    private static final class MyTabListener implements TabListener { 
     private NavigationTabsWithFragmentsV9 mActivity; 
     public MyTabListener(NavigationTabsWithFragmentsV9 activity /*,Fragment fragment*/){ 
      mActivity = activity; 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // Do nothing 
     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      Object obj = tab.getTag(); 
      if(null == obj){ 
       Bundle args = new Bundle(); 
       args.putString(SimpleFragment.EXTRA_OUTPUT_MESSAGE, tab.getText().toString()); 
       Fragment fragment = Fragment.instantiate(mActivity, SimpleFragment.class.getName(), args); 
       ft.add(android.R.id.content, fragment, tab.getText().toString()); 

       tab.setTag(obj = fragment); 
      } 

      ft.attach((Fragment)obj); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      if(null != mActivity.getSupportFragmentManager().findFragmentByTag(tab.getText().toString())){ 
       ft.detach((Fragment)tab.getTag()); 
      } 
     } 

    } 

    public static final class SimpleFragment extends Fragment { 
     public static final String EXTRA_OUTPUT_MESSAGE = "output_message"; 

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

      String outputMesasge = null; 
      if(null != getArguments()){ 
       outputMesasge = getArguments().getString(EXTRA_OUTPUT_MESSAGE); 
      } 
      if(null == outputMesasge || 0 == outputMesasge.trim().length()){ 
       outputMesasge = getString(R.string.demo_text); 
      } 
      TextView textView = (TextView) fragmentView.findViewById(R.id.textView_simpleFragmentOutput); 
      textView.setText(outputMesasge); 

      return fragmentView; 
     } 
    } 
} 

लेकिन जब मैं बदल सभी regular api(default platform api) करने के लिए support api, सब कुछ 4.3 मंच पर ठीक हो जाता है (लेकिन यह एक 2.3.3 मंच के साथ संगत नहीं है);

enter image description here

यहाँ कोड (ActionBar और टुकड़ा एपीआई छोड़कर कुछ भी नहीं अंतर)

package net.zengweizhi.android.gettingstarted.lesson05.test; 

import net.zengweizhi.android.gettingstarted.R; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

// डिफ़ॉल्ट मंच (केवल v11 में और बाद में)

से एपीआई का उपयोग करें
import android.annotation.SuppressLint; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.ActionBar.TabListener; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 

@SuppressLint ("NewApi")

public class NavigationTabsWithFragmentsV14 extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_navigation_tabs, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    private int mTabSeq = 0; 

    private void addTab(){ 
     getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     mTabSeq++; 

     Tab tab = getActionBar().newTab(); 
     tab.setText("TAB " + mTabSeq); 
     tab.setTabListener(new MyTabListener(this)); 
     getActionBar().addTab(tab); 
    } 

    private void removeTab(){ 
     Tab tab = getActionBar().getSelectedTab(); 
     getActionBar().removeTab(tab); 

     Fragment fragment = getFragmentManager().findFragmentByTag(tab.getText().toString()); 
     getFragmentManager().beginTransaction().remove(fragment).commit(); 
     if(getActionBar().getTabCount() == 0){ 
      getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.actionButton_addTab: 
      addTab(); 
      break; 
     case R.id.actionButton_removeTab: 
      removeTab(); 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    private static final class MyTabListener implements TabListener { 
     private NavigationTabsWithFragmentsV14 mActivity; 
     public MyTabListener(NavigationTabsWithFragmentsV14 activity /*,Fragment fragment*/){ 
      mActivity = activity; 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // Do nothing 
     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      Object obj = tab.getTag(); 
      if(null == obj){ // initialize fragment to tab 
       Bundle args = new Bundle(); 
       args.putString(SimpleFragment.EXTRA_OUTPUT_MESSAGE, tab.getText().toString()); 
       Fragment fragment = Fragment.instantiate(mActivity, SimpleFragment.class.getName(), args); 
       ft.add(android.R.id.content, fragment, tab.getText().toString()); 

       tab.setTag(obj = fragment); 
      } 
      ft.attach((Fragment)obj); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      if(null != mActivity.getFragmentManager().findFragmentByTag(tab.getText().toString())){ 
       ft.detach((Fragment)tab.getTag()); 
      } 
     } 
    } 

    public static final class SimpleFragment extends Fragment { 
     public static final String EXTRA_OUTPUT_MESSAGE = "output_message"; 

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

      String outputMesasge = null; 
      if(null != getArguments()){ 
       outputMesasge = getArguments().getString(EXTRA_OUTPUT_MESSAGE); 
      } 
      if(null == outputMesasge || 0 == outputMesasge.trim().length()){ 
       outputMesasge = getString(R.string.demo_text); 
      } 
      TextView textView = (TextView) fragmentView.findViewById(R.id.textView_simpleFragmentOutput); 
      textView.setText(outputMesasge); 

      return fragmentView; 
     } 
    } 
} 

मैं का उपयोग कर (मान-v14/classes.xml) और निम्न कोड

try { 
    Class<?> clazz = Class.forName(getString(R.string.class_navigationTabsAndFragmentsActivity)); 
    startActivity(clazz); 
} catch (ClassNotFoundException ex) { 
    showTextByToast(ex.getMessage()); 
} 

लेकिन मैं अभी भी द्वारा एक संगत संस्करण बना सकते हैं पता है कि support library संस्करण में हो रहा है चाहता हूँ, किसी को भी मेरी मदद कर सकते इस समस्या को यह पता लगाने के लिए?

+1

http: // stackoverflow।कॉम/प्रश्न/1 9 6422 9 5/एक्शनबार-टैब-सामग्री-ओवरलैपिंग/1 9 644639 # 1 9 644639 – Luksprog

+0

बहुत बहुत धन्यवाद @ लक्सप्रोग; कितना अजीब बात है, एंड्रॉइड टीम ने इस प्रमोबल को महसूस नहीं किया, या उन्होंने इसे अन्य उद्देश्य पर बदल दिया? क्या मुझे अभी भी समर्थन पुस्तकालय का उपयोग करना चाहिए; एक बग छोड़ दिया है कि बस एक समय बूम छोड़ दिया पसंद है; –

+1

मुझे नहीं पता कि किसी ने बग रिपोर्ट पोस्ट की है या नहीं। मैं अभी भी लाइब्रेरी का उपयोग करता हूं और संगतता पैकेज (जो अधिक बार आता है) के अपडेट के लिए घड़ी पर रहता है जो इसे हल कर सकता है। – Luksprog

उत्तर

2

गूगल विज्ञप्ति नेक्सस 5 और एक नया समर्थन पुस्तकालय (v19), इस संस्करण इस बग को ठीक enter image description here

संबंधित मुद्दे