Hallo,
wie war denn das nochmal, wenn ich über einen button einen neue Activity (DebtorHistory) öffne und und DebtorHistory eine Listview anzeigen soll, welche aber ein objekt, der sich in der Mainactivity befindet, benötigt? Braucht man dafür eine Instanz zu der Mainactivity?
In meinem Fall möchte ich, dass DebtorHistory sobald diese geöffnet wird, informationen aus einer sqlite datenbank ausliest und anzeigt.
Habe in der MainActivity ein Objekt der Klasse DataBaseHandler erstellt, welche die nötigen methoden für die DB beinhaltet.
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
.....
public DataBaseHandler myDBHandler;
....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.......
}
@Override
protected void onResume() {
super.onResume();
initFragments();
openDB();
}
@Override
protected void onDestroy() {
super.onDestroy();
closeDB();
}
private void initFragments() {
debtor = (Debtor)mSectionsPagerAdapter.getItem(0);
creditor = (Creditor)mSectionsPagerAdapter.getItem(1);
}
private void openDB() {
myDBHandler = new DataBaseHandler(this);
myDBHandler.open();
}
private void closeDB() {
myDBHandler.close();
}
...
}
Alles anzeigen
Die DebtorHistory.class wird durch ein button klick in dem fragment Debtor ausgeführt
public class Debtor extends Fragment {
MainActivity mainActivity;
public static final String ARG_SECTION_NUMBER = "section_number";
public Debtor(int position) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainActivity = (MainActivity) getActivity();
View v = inflater.inflate(R.layout.debtor, container, false);
showDebtorsHistory = (Button)v.findViewById(R.id.button1);
showDebtorsHistory.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent playlist = new Intent(getActivity(), DebtorHistory.class);
startActivityForResult(playlist, 100);
}
});
return v;
}
....
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mainActivity = (MainActivity) activity;
}
catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " Fehler: Keine MainActivity-Instanz!");
}
}
Alles anzeigen
die DebtorHistory.class:
public class DebtorHistory extends Activity {
Cursor cursor;
private ListView mainList;
MainActivity mainActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.debtor_history);
mainList = (ListView)findViewById(R.id.listView_Debtors);
populateListViewFromDB();
}
@SuppressWarnings("deprecation")
public void populateListViewFromDB() { //MainList mit Werten aus der db befüllen
startManagingCursor(cursor = mainActivity.myDBHandler.getAllDifferentNames1());
String[] dbSpaltenNamen = new String[] {"n", "i", "d"};
int[] zuListViewIDs = new int[] {R.id.txt_name, //hier die id's. name zu name
R.id.list_userImage,
R.id.datum };
SimpleCursorAdapter myCursorAdapter
= new SimpleCursorAdapter
(this, R.layout.history_listrow, cursor, dbSpaltenNamen, zuListViewIDs);
mainList.setAdapter(myCursorAdapter);
}
}
Alles anzeigen
Bekomme einen nullpointer in der Zeile startManagingCursor(cursor = mainActivity.myDBHandler.getAllDifferentNames1());
Oder muss ich über Intent irgendwas übermitteln??