フラグメントを交換する ActionBar タブ ナビゲーションを利用するアプリに取り組んでいます。各タブは同じ listfragment を呼び出しますが、データ セットは異なります。ユーザーがマイ リスト フラグメント内の項目を選択すると、詳細リスト フラグメントが表示されます。詳細リスト フラグメント内に、外部 OnClickListener の相互参照を含むダイアログを表示するボタンがあります。
ダイアログ選択からのデータを使用して新しい詳細フラグメントを表示するルート リスト フラグメントにコールバックを実装しようとしています。
私の問題は、MainActivity が 1 つしかなく、それ以外はすべてフラグメントであることです。コールバックを開始する方法がわかりません。
OnClickListener を開始し、詳細フラグメントの OnActivityCreate メソッドでボタンに設定する方法は次のとおりです。
// create instance of the OnClickListener
SeeAlsoOnClickListener seeAlsoListener = new SeeAlsoOnClickListener(this.getActivity(), seeAlsoList, categories);
button.setOnClickListener(seeAlsoListener);
ここに私の SeeAlsoOnClickListener クラスがあります:
public class SeeAlsoOnClickListener implements OnClickListener {
private Context context;
private ArrayList<String> categories;
private String[] seeAlsoList;
private String selection;
public SeeAlsoOnClickListener(Context context, String[] array, ArrayList<String> categories) {
this.context = context;
this.seeAlsoList = array;
this.categories = categories;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ListAdapter adapter = new ArrayAdapter<String>(context, R.layout.see_also_picker, seeAlsoList) {
ViewHolder holder;
Drawable icon;
class ViewHolder {
ImageView icon;
TextView title;
}
public View getView(int position, View convertView, ViewGroup parent) {
final LayoutInflater inflater = (LayoutInflater) context
.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(
R.layout.see_also_picker, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.icon);
holder.title = (TextView) convertView
.findViewById(R.id.title);
convertView.setTag(holder);
} else {
// view already defined, retrieve view holder
holder = (ViewHolder) convertView.getTag();
}
int tile = 0;
switch (Integer.parseInt(categories.get(position))) {
case 0:
tile = context.getResources().getIdentifier("acronyms","drawable",context.getPackageName());
break;
case 1:
tile = context.getResources().getIdentifier("algorithm","drawable",context.getPackageName());
break;
case 2:
tile = context.getResources().getIdentifier("anatomy","drawable",context.getPackageName());
break;
case 3:
tile = context.getResources().getIdentifier("calculator","drawable",context.getPackageName());
break;
case 4:
tile = context.getResources().getIdentifier("medicine","drawable",context.getPackageName());
break;
case 5:
tile = context.getResources().getIdentifier("treatment","drawable",context.getPackageName());
break;
}
holder.title.setText(seeAlsoList[position]);
holder.icon.setImageResource(tile);
return convertView;
}
};
// display alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("See Also");
builder.setAdapter(adapter,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int item) {
// get the selection
selection = seeAlsoList[item];
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
選択に基づいて別のフラグメントに交換する必要があることを除いて、これはすべてうまく機能します。どんな考えや提案も大歓迎です!ありがとうございます。