dimanche 15 février 2015

Fragment List Start New Fragment from SQLite

I have a fragment that lists available tickets from a SQLite database. A user can click any ticket to start completing that ticket. The idea is when the user clicks a ticket, it should start a new fragment pre-populated with that information from SQLite.


I've read multiple methods of starting fragments and passing list item positions to another fragment, but what about passing the SQLite id of the ticket to be completed? Or what about passing all of the ticket items to a new fragment so I don't have to query the database again?


All of my fragments will extend off of the app's main activity. From what I've read I shouldn't communicate directly with other fragments from fragments, but go through an activity both fragments have in common.


Any help would be greatly appreciated. Below is my code:


Fragment_OpenTickets.java:



public class Fragment_OpenTickets extends Fragment {

ArrayList<HashMap<String, String>> ticketList = new ArrayList<HashMap<String, String>>();

@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
Context context = getActivity();

DBController dbc = new DBController(context);
View view = inflater.inflate(R.layout.fragment_opentickets, container, false);
ListView listView = (ListView) view.findViewById(R.id.openList);
Cursor cursor = dbc.getAllOpenTickets();

if (cursor.moveToFirst()) {
do {
HashMap<String, String> hashMap = new HashMap<String, String>();
int size = cursor.getColumnCount();
for (int i = 0; i < size; i++) {
hashMap.put(cursor.getColumnName(i), cursor.getString(i));
}
ticketList.add(hashMap);
} while (cursor.moveToNext());
}

Adapter_OpenList adapter = new Adapter_OpenList(ticketList, context);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
// What do I do?
}
});

dbc.close();
return view;
}
}


Activity_Main.java.java



public class Activity_Main extends Activity {
DBController dbc = new DBController(this);
Fragment fr;
HashMap<String, String> queryValues;
Button refreshBtn;
ProgressDialog prgDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cursor cred = dbc.checkCredentials();
if ( cred != null && cred.moveToFirst() ){ // When dealing with cursors, ALWAYS check for null and check for moveToFirst() without fail.
fr = new Fragment_OpenTickets();
//String username = cred.getString(cred.getColumnIndex(DBHelper.SETTINGS_COLUMN_USERNAME));
cred.close();
} else {
fr = new Fragment_Settings();
}
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();

prgDialog = new ProgressDialog(this);
prgDialog.setCancelable(false);

refreshBtn = (Button) findViewById(R.id.btn_refresh);
View.OnClickListener ocRefresh = new View.OnClickListener() {
@Override
public void onClick(View v) {
syncSQLiteMySQLDB();
}
};
refreshBtn.setOnClickListener(ocRefresh);
}

// Top menu buttons.
public void selectFrag(View view) {
switch (view.getId()) {
case R.id.radio_open:
fr = new Fragment_OpenTickets();
break;
case R.id.radio_submitted:
fr = new Fragment_SubTickets();
break;
case R.id.radio_settings:
fr = new Fragment_Settings();
break;
default:
fr = new Fragment_OpenTickets();
}
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
}
}


When a ticket is selected from Fragment_OpenTickets it should launch a new fragment called Fragment_Ticket (not created yet) with selective edittext fields pre-populated from the database.


Aucun commentaire:

Enregistrer un commentaire