アプリケーションで tabHost を使用していますが、ビューの 1 つ (タブの 1 つに対応) に、別のアクティビティと別のレイアウトに移動する必要があるボタンがあります。問題は、この新しいレイアウトで引き続きタブにアクセスできるようにするにはどうすればよいかということです。または、この新しいレイアウトを FrameLayout 内にロードするにはどうすればよいですか?.
ここに私がやろうとしていることをアップロードしました:http://imageshack.us/photo/my-images/541/exampleu.png/
前もって感謝します。!
Pd: 私は Android の初心者です。TabActivity を使用せずに私の目的を達成するためのより良い方法があるかもしれません。私はどんな提案にもオープンです。
EDITED:提案されたように、フラグメントを使用することにしました。そして今、私は次のものを持っています:
- AplicationActivity は FragmentActivity を拡張します
- ClientActivity は Fragment を拡張します
- SettingsActivity は Fragment を拡張します
- DataClientActivity は Fragment を拡張します
および次のレイアウト:
- activity_applicacion
- activity_client
- アクティビティ設定
- activity_data_client
activity_aplicacion.xml には、TabHost、FrameLayout、TabWidget があり、これらからタブを使用して ClientActivity と SettingsActivity に移動できます。
ClientActivity には「new」というボタンがあり、このボタンを押すと DataClientActivity に移動します。したがって、ClientActivity には次のようなものがあります。
public void onClickNew(View view){
DataClientActivity fragmentDataClient = new DataClientActivity ();
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.tabcontent,fragmentDataClient , "fragmentDataClient ");
ft.addToBackStack(null);
ft.commit();
}
しかし、アプリを実行すると、次のエラーが発生しました。
05-04 21:55:04.780: E/AndroidRuntime(7515): java.lang.IllegalStateException: ビュー クラス android.widget.Button の onClick ハンドラのアクティビティ クラス com.nrAplicationActivity でメソッド onClickNew(View) が見つかりませんでしたid 'buttonNew'
だから私は今少し混乱しています。ボタンがある ClientActivity ではなく、AplicationActivity に onClickNew メソッドを含める必要があるのはなぜですか?
EDITED 2:私はこれに対する解決策を見つけました:
public class ClientActivity extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.activity_clientes, container, false);
**// Register for the Button.OnClick event
Button b = (Button)view.findViewById(R.id.buttonNew);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(Tab1Fragment.this.getActivity(), "OnClickMe button clicked", Toast.LENGTH_LONG).show();
Log.e("onClickNuevo2 ", "inicio");
DataClientActivity fragmentDataClient= new DataClientActivity();
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.tabcontent,fragmentDataClient, "fragmentDataClient");
ft.addToBackStack(null);
ft.commit();
}
});**
return view;
}
}
ClientActivity 内のボタンに onClick リスナーを登録する必要がありました。今、すべてが完璧に動作します!. Divya Motiwala に感謝します :) そして、このリンクに感謝します: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/#comment-410