سلام ، من داخل فرگمنت دستور اپدیت رو نوشتم ، دستور اپدیت اعمال میشه اما تا زمانی که برنامه رو از نو باز نکنم دیتابیس رفرش نمیشه ، دلیلش هم برمی گرده به اینکه داخل برنامه ام از فرگمنت و ViewPagerAdapter استفاده شده .. دستور update هیچ مشکلی نداره و از تاپیک های اموزشی همین سایت استفاده کردم .
کدفرگمنت انتخاب درس
کد فرگمنت سوم
کدهای مین اکتویتی
کدهای ViewPagerAdapter
همونطور که می بنید تو فرگمتی که اسمش لی اوت سوم هست ، یک تکست باکس هست که اسمش main1 هست و مقدار فیلد btn_click از جدول statusTb
رو برمی گردونه ، حالا فرض کنید من روی باتن پنجم از فرگمنت انتخاب درس کلیک کردم و وارد لی اوت سوم شدم ، نتیجه ای که می بینم عدد 5 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟
کدفرگمنت انتخاب درس
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | package com.example.school.app.ViewPagerFragment; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.school.app.MainActivity; import com.example.school.app.R; /** * A simple {@link Fragment} subclass. */ public class EntekhabDarsFragment extends Fragment { public static SQLiteDatabase database; public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); public static final String DIR_DATABASE = DIR_SDCARD + "/mysite-com_folder/" ; View v; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { v = inflater.inflate(R.layout.fragment_entekhab_dars, container, false ); eventXML(); return v; } private void eventXML() { database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "mysitedb.sqlite" , null ); v.findViewById(R.id.btn1) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { database.execSQL( "UPDATE statusTb SET btn_click=1; " ); MainActivity.viewPager.setCurrentItem( 2 ); } }); v.findViewById(R.id.btn2) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { database.execSQL( "UPDATE statusTb SET btn_click=2; " ); MainActivity.viewPager.setCurrentItem( 2 ); } }); v.findViewById(R.id.btn3) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { database.execSQL( "UPDATE statusTb SET btn_click=3; " ); MainActivity.viewPager.setCurrentItem( 2 ); } }); v.findViewById(R.id.btn4) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { database.execSQL( "UPDATE statusTb SET btn_click=4; " ); MainActivity.viewPager.setCurrentItem( 2 ); } }); v.findViewById(R.id.btn5) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { database.execSQL( "UPDATE statusTb SET btn_click=5; " ); MainActivity.viewPager.setCurrentItem( 2 ); } }); } } |
کد فرگمنت سوم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package com.example.school.app.ViewPagerFragment; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Typeface; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.Fragment; import android.text.method.ScrollingMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.school.app.MainActivity; import com.example.school.app.R; /** * A simple {@link Fragment} subclass. */ public class Layout3Fragment extends Fragment { public static TextView main2; private TextView one, two, tree,main1; private Typeface typeface; public static SQLiteDatabase database; public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); public static final String DIR_DATABASE = DIR_SDCARD + "/mysite-com_folder/" ; public Layout3Fragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_layout3, container, false ); typeface = Typeface.createFromAsset(getActivity().getAssets(), "IranSans.ttf" ); one = (TextView) view.findViewById(R.id.header_one_text); two = (TextView) view.findViewById(R.id.header_two_text); tree = (TextView) view.findViewById(R.id.header_tree_text); main1 = (TextView) view.findViewById(R.id.page3_text_english); main2 = (TextView) view.findViewById(R.id.page3_text_farsi); one.setTypeface(typeface); two.setTypeface(typeface); tree.setTypeface(typeface); database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "mysitedb.sqlite" , null ); int btn_click_code= 0 ; Cursor cursor = database.rawQuery( "SELECT btn_click FROM statusTb " , null ); cursor.moveToFirst(); if (cursor.moveToFirst()) { btn_click_code = cursor.getInt(cursor.getColumnIndex( "btn_click" )); } cursor.close(); main1.setText(Integer.toString(btn_click_code)); return view; } } |
کدهای مین اکتویتی
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | package com.example.school.app; import android.graphics.Color; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import com.astuetz.PagerSlidingTabStrip; import com.example.school.app.Adapter.ViewPagerAdapter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.File; import java.io.InputStream; public class MainActivity extends AppCompatActivity { private PagerSlidingTabStrip tabLayout; public static ViewPager viewPager; private Toolbar toolbar; private ViewPagerAdapter adapter; public static String number_btn= "-1" ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle( "مدرسه" ); viewPager = (ViewPager) findViewById(R.id.pager); tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs); setSupportActionBar(toolbar); adapter = new ViewPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); tabLayout.setViewPager(viewPager); tabLayout.setTextColor(Color.WHITE); viewPager.setOffscreenPageLimit( 4 ); File root = android.os.Environment.getExternalStorageDirectory(); String folderName = "/mysite-com_folder" ; File dir = new File (root.getAbsolutePath() + folderName); if (!dir.exists()) { dir.mkdirs(); // build directory } InputStream in = getResources().openRawResource(R.raw.db); String filename = "mysite.sqlite" ; File f = new File(root + folderName , filename); if (!f.exists()){ try { OutputStream out = new FileOutputStream(f); byte [] buffer = new byte [ 1024 ]; int len; while ((len = in.read(buffer, 0 , buffer.length)) != - 1 ){ out.write(buffer, 0 , len); } in.close(); out.close(); } catch (FileNotFoundException e) { // } catch (IOException e) { // } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true ; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true ; } return super .onOptionsItemSelected(item); } } |
کدهای ViewPagerAdapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | package com.example.school.app.Adapter; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import com.example.school.app.MainActivity; import com.example.school.app.ViewPagerFragment.EntekhabDarsFragment; import com.example.school.app.ViewPagerFragment.GozareshFragment; import com.example.school.app.ViewPagerFragment.Layout3Fragment; import com.example.school.app.ViewPagerFragment.RahnemaFragment; /** * Created by mehran on 01/10/2015. */ public class ViewPagerAdapter extends FragmentPagerAdapter { public static SQLiteDatabase database; private String[] TITLE = { "انتخاب درس" , "گزارش" , "لی اوت ۳" , "راهنما" }; public ViewPagerAdapter(FragmentManager fm) { super (fm); } @Override public Fragment getItem( int position) { switch (position) { case 0 : return new EntekhabDarsFragment(); case 1 : return new GozareshFragment(); case 2 : return new Layout3Fragment(); case 3 : return new RahnemaFragment(); default : return null ; } } @Override public CharSequence getPageTitle( int position) { return TITLE[position]; } @Override public long getItemId( int position) { return position; } @Override public int getCount() { return TITLE.length; } } |
همونطور که می بنید تو فرگمتی که اسمش لی اوت سوم هست ، یک تکست باکس هست که اسمش main1 هست و مقدار فیلد btn_click از جدول statusTb
رو برمی گردونه ، حالا فرض کنید من روی باتن پنجم از فرگمنت انتخاب درس کلیک کردم و وارد لی اوت سوم شدم ، نتیجه ای که می بینم عدد 5 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟