مشکل در آپدیت لیست ویو با داده های بانک اطلاعات sqlite
دوستان و اساتید محترم سلام.
طاعات و عباداتتون قبول درگاه حق .انشالله...
لیست ویویی دارم که اطلاعاتش رو از بانک sqlite نمایش میده
بانکی هم که ازش حرف میزنم در حد خیلی خیلی ساده اس
- id
- subject
- title
دو تا اکتیویتی دارم
یکی واسه موضوعات که کاربر انتخاب میکنه (دقیقا صفحه منو که موضوعات رو نشون میده مثلا سه تا دسته بندی : روانشناسی ، آموزشی و متفرقه )
یکی هم واسه لیست ویو
میخوام تو اکتیویتی اصلی که کاربر موضوع رو انتخاب کرد بره صفحه دومی (لیست ویو) و هرچی رکورد (title) که با دسته بندی (subject) مطابقت میکنه رو نشون بده.
مشکلی اصلی اینجاس وقتی عنوان موضوع رو با intent به صفحه لیست ویو میفرستم برای اولین بار درست کار میکنه ولی وقتی دکمه back رو میزنم و روی یه موضوع دیگه کلیک میکنم دوباره همون اطلاعات موضوع قبلی که انتخاب شده رو نشون میده
برای اینکه بتونم منظورمو برسونم کدها رم همینجا میذارم.
این صفحه انتخاب موضوع (صفحه منو)
public class ActivityMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button ravanshenasi = (Button) findViewById(R.id.btn1);
Button amoozeshi = (Button) findViewById(R.id.btn2);
Button motafarreghe = (Button) findViewById(R.id.btn3);
OnClickListener numberClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
Button btn = (Button) view;
String category = btn.getText().toString();
Intent intent = new Intent(ActivityMenu.this, ActivityMain.class);
intent.putExtra("CATEGORY", category);
ActivityMenu.this.startActivity(intent);
}
};
ravanshenasi.setOnClickListener(numberClickListener);
amoozeshi.setOnClickListener(numberClickListener);
motafarreghe.setOnClickListener(numberClickListener);
}
}
اینم صفحه نمایش لیست ویو
public class ActivityMain extends Activity {
public ArrayAdapter adapter;
public String category;
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(G.notes);
lstContent.setAdapter(adapter);
Bundle extras = getIntent().getExtras();
if (extras.containsKey("CATEGORY")) {
category = extras.getString("CATEGORY");
}
Cursor cursor = G.database.rawQuery("SELECT * FROM book WHERE subject='" + category + "'", null);
while (cursor.moveToNext()) {
StructNote book_title = new StructNote();
book_title.title= cursor.getString(cursor.getColumnIndex("title"));
G.notes.add(book_title);
}
cursor.close();
adapter.notifyDataSetChanged();
}
}
البته صفحه StructNote
public class StructNote {
public String title;
}
پیشاپیش از راهنمایی هاتون سپاسگزارم
اگه مشکل نمایش دیتا نداری بخاطر اینه که لیست ویو رو با ادپترت ست نکردی.پاینن این خط
adapter.notifyDataSetChanged();
اینو بنویس:
listview.setadapter(adapter);
اصولی کار نکردید ! این پاسخ سوالتون نیست ولی میتونه کمکتون کنه مشکل حل بشه
دسته بندی ها را در یک جدول دیگه ذخیره کنید و با id دسته بند ، مطالب رو به اون دسته مرتبط کنید
id | cat_name
1 | روانشناسی
2 | آموزشی
3 | متفرقه
-------------------------
Table Content
-------------------------
id | Text | cat_id
1 | text1 | 1
2 | text2 | 2
حالا کافیه یه مقدار int به اون صفحه پاس بدید و در کوئری اجرا کنید ، اگر تعداد دسته ها کمه و براتون سخته جدول درست کنید ، می تونید مقدار ها رو خودتون پردازش کنید اما اصلا توصیه نمیشه که کوئری رو به اون شکل بنویسید و در ضمن احتمال زیاد کوئری هم مشکل داره و باید به این شکل بشه
SELECT * FROM book WHERE subject LIKE 'آموزشی'
و اگر طبق روشی که من گفتم پیش برید کوئری به این شکل و قابل اطمینان تر میشه
SELECT * FROM book WHERE cat_id = 1
هر چند با این روش مخالف ام ، اما یه سری ایراداتی که وجود داشت رو بر طرف کردم ، امیدوارم کمک کنه
public class ActivityMain extends Activity {
public ArrayAdapter adapter;
public String category;
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(G.notes);
lstContent.setAdapter(adapter);
Bundle extras = getIntent().getExtras();
if (extras!=null && extras.containsKey("CATEGORY")) {
category = extras.getString("CATEGORY");
Cursor cursor = G.database.rawQuery("SELECT * FROM book WHERE subject LIKE '" + category + "'", null);
/////////
G.notes.clear();
/////////
while (cursor.moveToNext()) {
StructNote book_title = new StructNote();
book_title.title= cursor.getString(cursor.getColumnIndex("title"));
G.notes.add(book_title);
}
cursor.close();
adapter.notifyDataSetChanged();
}
else{
finish();
}
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .