साथ नहीं संगत अच्छी तरह से करता है।एंड्रॉयड - समर्थन पुस्तकालय से टुकड़ा समर्थन पुस्तकालय का उपयोग करते समय मैं एक अजीब समस्या का सामना 4.3 मंच
मैं बस की तरह क्या API Demo
किया था, 2.3.3 मंच पर स्विचन टुकड़े के साथ एक गतिशील नेविगेशन टैब बनाना चाहते हैं।
सब कुछ 2.3.3 मंच पर ठीक हो जाता है, लेकिन जब मैं 4.3 मंच पर एक ही गतिविधि पर एक दृष्टि डाली, मुझे लगता है कि कुछ काफी अजीब पाया।
SupportFragmentManagement
टुकड़ा अलग नहीं कर सकते, टैब का चयन कॉलबैक सही ढंग से निष्पादित नहीं हुआ की तरह लगता है;
निम्नलिखित चित्रों को दिखाने के कैसे मेरे डेमो
जाने के लिए और यहाँ मेरे कोड है:
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 मंच के साथ संगत नहीं है);
यहाँ कोड (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
संस्करण में हो रहा है चाहता हूँ, किसी को भी मेरी मदद कर सकते इस समस्या को यह पता लगाने के लिए?
http: // stackoverflow।कॉम/प्रश्न/1 9 6422 9 5/एक्शनबार-टैब-सामग्री-ओवरलैपिंग/1 9 644639 # 1 9 644639 – Luksprog
बहुत बहुत धन्यवाद @ लक्सप्रोग; कितना अजीब बात है, एंड्रॉइड टीम ने इस प्रमोबल को महसूस नहीं किया, या उन्होंने इसे अन्य उद्देश्य पर बदल दिया? क्या मुझे अभी भी समर्थन पुस्तकालय का उपयोग करना चाहिए; एक बग छोड़ दिया है कि बस एक समय बूम छोड़ दिया पसंद है; –
मुझे नहीं पता कि किसी ने बग रिपोर्ट पोस्ट की है या नहीं। मैं अभी भी लाइब्रेरी का उपयोग करता हूं और संगतता पैकेज (जो अधिक बार आता है) के अपडेट के लिए घड़ी पर रहता है जो इसे हल कर सकता है। – Luksprog