Android アプリを開発しようとしていますが、ActionBar に問題があります。
Android 用の Instagram や Twitter に似たものが必要です。3 つのタブを持つアクション バーがあり、これらのタブにはいくつかのボタンがあります。すべてのボタンには OnClick() があり、 FragmentTransaction (およびメソッド replace()) を使用して、実際のフラグメントを新しいフラグメント (たとえば ''FragmentN'') に置き換えます。
私の最初の問題は、ActionBar からタブを選択すると、選択したタブが「FragmentN」に置き換わらず、一番上に配置されるため、両方のフラグメントが上下に表示され続けることです。
別の問題もありますが、前の問題に関連していると思います...ただし、例を挙げて説明します。ActionBar からタブ A を選択し、このタブからボタン 3 を押すと、「FragmentA3」が「FragmentA」に置き換わります。この後、ActionBar から tabC を選択します。ここで、常に ActionBar からタブ A を再度選択しますが、「FragmentA」を再度表示する代わりに、以前に選択した「FragmentA3」が表示されます。
これらの問題を解決するにはどうすればよいですか? どうもありがとうございました。
編集:これは私のコードです。
主な活動
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
@SuppressLint("NewApi")
@TargetApi(11)
public class ABActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//TAB 1
Tab tab = actionBar.newTab();
tab.setIcon(R.drawable.p);
String label1 = "one";
TabListener<Tab1Fragment> tl1 = new TabListener<Tab1Fragment>(this,
label1, Tab1Fragment.class);
tab.setTabListener(tl1);
actionBar.addTab(tab);
//TAB2
tab = actionBar.newTab();
tab.setIcon(R.drawable.m);
String label2 = "two";
TabListener<Tab2Fragment> tl2 = new TabListener<Tab2Fragment>(this,
label2, Tab2Fragment.class);
tab.setTabListener(tl2);
actionBar.addTab(tab);
//TAB3
tab = actionBar.newTab();
tab.setIcon(R.drawable.s);
String label3 = "three";
TabListener<Tab3Fragment> tl3 = new TabListener<Tab3Fragment>(this,
label3, Tab3Fragment.class);
tab.setTabListener(tl3);
actionBar.addTab(tab);
}
private class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(Activity activity, String tag, Class<T> clz)
{
mActivity = activity;
mTag = tag;
mClass = clz;
}
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}} }
Tab1フラグメント
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
public class Tab1Fragment extends Fragment {
Fragment f;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
}
@Override
public void onActivityCreated (Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
f=this;
Button butt = (Button) getActivity().findViewById(R.id.butt);
butt.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")
public void onClick(View v) {
Fragment nuovo = new Nuova();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, nuovo);
transaction.addToBackStack("nuovo");
transaction.commit();
} });
}
}
ヌーバ
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
public class Nuova extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return (LinearLayout) inflater.inflate(R.layout.nuova, container, false);
} }
tab1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/butt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="one" />
</LinearLayout>
nuova.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nuovo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="nuova" />
</LinearLayout>