у меня есть вкладка активность (A.java) в моем приложении для Android.когда я перехожу из действия A в другое (скажем, B) и обратно в A, я ничего не нахожу на вкладке - PullRequest
0 голосов
/ 16 августа 2011

У меня есть две вкладки в Tab Activity (скажем, A).
Вкладка 1 показывает что-то (здесь неважно).
На вкладке 2 показан ListView, подключенный к базе данных SQLite с помощью SimpleCursorAdapter (WORKS PERFECT).
Теперь я нажимаю на элемент в LIST на вкладке 2. Это приведет вас к другому занятию (скажем, B). теперь, когда я возвращаюсь от действия B к занятию A (занятие с вкладками).
Я не вижу ListView там. Вкладка 2 пуста.

Что делать? Пожалуйста, проверьте часть кода адаптера курсора также, потому что я получаю
"ОШИБКА / Курсор (8736): неверный оператор в fillWindow ()" IN logcat.

Это действие (Java-файл) TAB 2.

public class ViewAll extends Activity implements OnItemClickListener {
TextView selection ;
Cursor cursor;
ListView lv1;

@Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

        setContentView(R.layout.bday_list);
       DatabaseHelp dbHelp = new DatabaseHelp(getApplicationContext());
       Log.d("holla", "after database open!");
       lv1= (ListView)findViewById(R.id.List_of_bday);


       dbHelp.open();
        cursor =dbHelp.fetchAllContacts();
         Log.d("DOR DOR",cursor.getCount()+"");
        startManagingCursor(cursor);

                    // the desired columns to be bound
                    String[] columns = new String[] {DatabaseHelp.KEY_NAME, DatabaseHelp.KEY_DATE };
                    // the XML defined views which the data will be bound to
                    int[] to = new int[] { R.id.tv_name, R.id.tv_date };

                   // create the adapter using the cursor pointing to the desired data as well as the layout information
                    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.list_each_row, cursor, columns, to);
                    // set this adapter as your ListActivity's adapter
                    lv1.setAdapter(mAdapter);

                   dbHelp.close();
lv1.setOnItemClickListener(this);

               }


    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "clicked "+arg2, Toast.LENGTH_SHORT).show();
        Intent i=new Intent(this,ViewOne.class);
        startActivity(i);

    }}    

Это код TABBEd ДЕЯТЕЛЬНОСТИ: -

public class Today extends TabActivity {
    @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
    Resources res=getResources();
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, TodayFinal.class);


    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("today").setIndicator("View Today's Birthday",res.getDrawable(R.drawable.icon)).setContent(intent);

    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, ViewAll.class);
//THIS TAKES YOU TO THE ABOVE MENTIONED ACTIVITY(TAB 2)

      spec = tabHost.newTabSpec("all").setIndicator("View All",
                      res.getDrawable(R.drawable.icon))
                  .setContent(intent);


    tabHost.addTab(spec);



}

1 Ответ

1 голос
/ 16 августа 2011

Вы звоните dbHelp.close(); после настройки адаптера.Но для правильной работы адаптера курсора должно быть открытое соединение БД, так как он использует курсор при каждом вызове getView.Переместите закрывающий вызов БД на onDestroy.Или откройте его и установите адаптер в onStart, а затем закройте в onStop.

...