4 つのアダプターを備えた 4 つのフラグメントを含むスクロール可能なタブ レイアウトがあります。各フラグメントには、SoundPool
短い mp3 クリップを再生するために使用するいくつかのボタンがあります。ほとんどの場合 (ボタンをクリックした後のいくつかのクラッシュを除いて) 動作しますが、あるフラグメントから別のフラグメントへのスクロールに時間がかかることに気付きました。また、短いクリップを使用して見たものに基づいてMediaPlayer
切り替える前にアイテムを使用していましたが、最初のページをロードするのに時間がかかり、クリックするとアプリがクラッシュすることがあります ( . そのため、スクロールをよりスムーズにし (ハードウェア アクセラレーションをオンにしています)、ページの読み込みを高速化し、ボタンがクラッシュしないようにしたいと考えています。今私は持っています:SoundPool
MediaPlayer
MainActivity で:
public static class MiscFragment extends Fragment {
public MiscFragment() {
}
View rootView;
GridView gridView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.tab_fragment,
container, false);
gridView = (GridView) rootView.findViewById(R.id.tabgridview);
gridView.setAdapter(new MiscAdapter(getActivity()));
return rootView;
}
}
Fragments
これは、私が使用している他のクラスと同じ内部クラスです。そして対応するAdapter
クラス:
public class MiscAdapter extends BaseAdapter {
private Context mContext;
private String[] mButtons = { "Button1", "Button2", "Button3"};
public MiscAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
return mButtons.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button myButton;
if (convertView == null) {
myButton = new Button(mContext);
myButton.setLayoutParams(new GridView.LayoutParams(230, 150));
myButton.setPadding(8, 8, 8, 8);
convertView = myButton;
} else {
myButton = (Button) convertView;
}
myButton.setText(mButtons[position]);
myButton.setId(position);
myButton.setTag(Integer.valueOf(position));
myButton.setOnClickListener(new MyOnClickListener(position));
return convertView;
}
class MyOnClickListener implements OnClickListener {
private int position;
final SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
List<Integer> streams = new ArrayList<Integer>();
final int soundID1 = pool.load(mContext, R.raw.mp3_1, 1);
final int soundID2 = pool.load(mContext, R.raw.mp3_2, 1);
final int soundID3 = pool.load(mContext, R.raw.mp3_3, 1);
public MyOnClickListener(int position) {
this.position = position;
}
public void onClick(View v) {
position = v.getId();
if(position == 0){
int streamID1 = pool.play(soundID1, 1.0f, 1.0f, 1, 0, 1.0f);
streams.add(streamID1);
}
if(position == 1){
int streamID2 = pool.play(soundID2, 1.0f, 1.0f, 1, 0, 1.0f);
streams.add(streamID2);
}
if(position == 2){
int streamID3 = pool.play(soundID3, 1.0f, 1.0f, 1, 0, 1.0f);
streams.add(streamID3);
}
}
}
この Adapter クラスは、他の 用に複製されFragments
ます。GridView
問題は、すべてのアダプターでand/orを繰り返し使用することだと思いますが、SoundPool
よくわかりません。どんな助けでも本当に感謝します!