سلام ، من داخل فرگمنت دستور اپدیت رو نوشتم ، دستور اپدیت اعمال میشه اما تا زمانی که برنامه رو از نو باز نکنم دیتابیس رفرش نمیشه ، دلیلش هم برمی گرده به اینکه داخل برنامه ام
از فرگمنت و ViewPagerAdapter استفاده شده
کدفرگمنت انتخاب درس
کد فرگمنت سوم
کدهای مین اکتویتی
کدهای ViewPagerAdapter
همونطور که می بنید تو فرگمتی که اسمش لی اوت سوم هست ، یک تکست باکس هست که اسمش main1 هست و مقدار فیلد btn_click از جدول statusTb
رو برمی گردونه ، حالا فرض کنید من روی باتن پنجم از فرگمنت انتخاب درس کلیک کردم و وارد لی اوت سوم شدم ، نتیجه ای که می بینم عدد 5 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟
از فرگمنت و ViewPagerAdapter استفاده شده
کدفرگمنت انتخاب درس
کد:
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 = "/Ketabsoft-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 = "ketabsoftdb.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 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟