29-07-1394، 10:10 ب.ظ
سلام ، من داخل فرگمنت دستور اپدیت رو نوشتم ، دستور اپدیت اعمال میشه اما تا زمانی که برنامه رو از نو باز نکنم دیتابیس رفرش نمیشه ، دلیلش هم برمی گرده به اینکه داخل برنامه ام از فرگمنت و ViewPagerAdapter استفاده شده .. دستور update هیچ مشکلی نداره و از تاپیک های اموزشی همین سایت استفاده کردم .
کدفرگمنت انتخاب درس
کد فرگمنت سوم
کدهای مین اکتویتی
کدهای ViewPagerAdapter
همونطور که می بنید تو فرگمتی که اسمش لی اوت سوم هست ، یک تکست باکس هست که اسمش main1 هست و مقدار فیلد btn_click از جدول statusTb
رو برمی گردونه ، حالا فرض کنید من روی باتن پنجم از فرگمنت انتخاب درس کلیک کردم و وارد لی اوت سوم شدم ، نتیجه ای که می بینم عدد 5 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟
کدفرگمنت انتخاب درس
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); } }); } }
کد فرگمنت سوم
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; } }
کدهای مین اکتویتی
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
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 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟