package org.softeg.slartus.forpdaplus.listfragments;/* * Created by slinkin on 21.03.14. */ import android.content.Context; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import org.softeg.slartus.forpdaplus.R; import org.softeg.slartus.forpdaplus.listtemplates.BrickInfo; import org.softeg.slartus.forpdaplus.listtemplates.ListCore; import java.util.ArrayList; public class BricksListDialogFragment extends DialogFragment implements AdapterView.OnItemClickListener { private static final String BRICK_NAMES_KEY = "BRICK_NAMES_KEY"; private static final String DIALOG_ID_KEY = "DIALOG_ID_KEY"; private static final String TAG = "BricksListDialogFragment"; public static final String QUICK_LIST_ID = "QUICK_LIST_ID"; public static final String CREATE_POST_ID = "CREATE_POST_ID"; public BricksListDialogFragment(){ super(); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Object o = m_ListView.getAdapter().getItem((int) l); if (o == null) return; BrickInfo brickInfo = (BrickInfo) o; ((IBricksListDialogCaller) getActivity()).onBricksListDialogResult(this.getDialog(), args.getString(DIALOG_ID_KEY), brickInfo, args); } public interface IBricksListDialogCaller { Context getContext(); android.support.v4.app.FragmentManager getSupportFragmentManager(); void onBricksListDialogResult(android.content.DialogInterface dialog, String dialogId, BrickInfo brickInfo, Bundle args); } static BricksListDialogFragment newInstance(String dialogId, String[] brickNames, Bundle args) { BricksListDialogFragment f = new BricksListDialogFragment(); Bundle arguments = new Bundle(); arguments.putStringArray(BRICK_NAMES_KEY, brickNames); arguments.putString(DIALOG_ID_KEY, dialogId); if (args != null) arguments.putAll(args); f.setArguments(arguments); return f; } public static void showDialog(IBricksListDialogCaller bricksListDialogCaller, String dialogId, String[] brickNames, Bundle args) { FragmentTransaction ft = bricksListDialogCaller.getSupportFragmentManager().beginTransaction(); Fragment prev = bricksListDialogCaller.getSupportFragmentManager().findFragmentByTag(TAG); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); // Create and show the dialog. DialogFragment newFragment = BricksListDialogFragment.newInstance(dialogId, brickNames, args); newFragment.show(ft, TAG); } private Bundle args; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { args = getArguments(); } if (savedInstanceState != null) { args = savedInstanceState; } } @Override public void onSaveInstanceState(android.os.Bundle outState) { if (args != null) outState.putAll(args); super.onSaveInstanceState(outState); } private ListView m_ListView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(R.string.select_list); View v = inflater.inflate(R.layout.bricks_list_dialog, container, false); assert v != null; m_ListView = (ListView) v.findViewById(android.R.id.list); return v; } @Override public void onActivityCreated(android.os.Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); m_ListView.setAdapter(new ListAdapter(getActivity(), ListCore.createBricks(args.getStringArray(BRICK_NAMES_KEY)))); m_ListView.setOnItemClickListener(this); } public class ListAdapter extends BaseAdapter { private final LayoutInflater mInflater; private ArrayList<BrickInfo> mData; public ListAdapter(Context context, ArrayList<BrickInfo> data) { mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mData = data; } public void setData(ArrayList<BrickInfo> data) { mData = data; } @Override public int getCount() { return mData == null ? 0 : mData.size(); } @Override public Object getItem(int i) { return mData.get(i); } @Override public long getItemId(int i) { return i; } @Override public android.view.View getView(int position, android.view.View view, android.view.ViewGroup parent) { final ViewHolder holder; if (view == null) { view = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false); holder = new ViewHolder(); holder.text1 = (TextView) view.findViewById(android.R.id.text1); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } BrickInfo item = mData.get(position); holder.text1.setText(item.getTitle()); return view; } class ViewHolder { TextView text1; } } }