بروز رسانی لیست ویو با کلیک روی آیتم های آن [حل شد]
سلام دوستان
من لیستی از عناوین دارم که هر عنوان چندین زیرعنوان داره. لیست عناوین را دقیقا با همون روش لیست ویو که استاد گفتن پیاده سازی کردم. حالا می خوام با کلیک روی هرکدام از آیتم ها لیست ویو مجددا بارگذاری بشه و اینبار زیرعنوان ها را نشون بده و با زدن دکمه بک ( که میتونه این دکمه هم توی صفحه نمایش لیست ویو قرار داده بشه) مجددا همون عناوین اصلی نمایش داده بشه.
برای اینکار به ذهنم رسید توی adapter یک intent به خود اکتیویتی بزنم و مقدار جدید را بش پاس بدم مثل کد زیر
laySubject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.currentActivity, ActivitySubject.class);
intent.putExtra("NEW_SUB", item.subject);
G.currentActivity.startActivity(intent);
}
});
و داخل Manifest هم صفت android:launchMode="singleTop" را به اکتیویتی دادم تا کرش نکنه
از طرف دیگه داخل اکتیویتی که لیست ویو را نشون میده از کد زیر درون onResume برای گرفتن مقادیر intent استفاده کردم
Bundle extras = getIntent().getExtras();
if (extras != null) {
if (extras.containsKey("NEW_SUB")) {
currentSub = new File(extras.getString("NEW_OR_UPDATE"));
}
اما متاسفانه لیست ویو با مقادیر زیر عنوان بروز نمیشه
کلا لپ مطلب اینه که میخوام با انتخاب هر آیتم لیست ویو زیر عنوان ها را بم نشون بده و با زدن بک مجدد لیست عنوان ها را بم نشون بده.
ممنون میشم راهنماییم کنید.
مثال زیر رو امتحان کنید :
public class ActivityMain extends Activity {
private static int currentParentId = 0;
private AdapterBase adapterBase;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
adapterBase = new AdapterBase(FakeData.menuData);
final Button btnBack = (Button) findViewById(R.id.btnBack);
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
currentParentId = FakeData.getNewParentId(currentParentId);
FakeData.load(currentParentId);
adapterBase.notifyDataSetChanged();
btnBack.setVisibility(currentParentId == 0 ? View.INVISIBLE
: View.VISIBLE);
}
});
ListView lvMenu = (ListView) findViewById(R.id.lvMenu);
lvMenu.setAdapter(adapterBase);
lvMenu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
StructMenu item = FakeData.menuData.get(position);
FakeData.load(item.id);
currentParentId = item.id;
adapterBase.notifyDataSetChanged();
btnBack.setVisibility(currentParentId == 0 ? View.INVISIBLE
: View.VISIBLE);
}
});
}
}
کلاس FakeData
public class FakeData {
public static ArrayList<StructMenu> menuData = new ArrayList<StructMenu>();
public static ArrayList<StructMenu> baseData = new ArrayList<StructMenu>();
public static void init() {
baseData.add(new StructMenu(1, 0, "Menu 1"));
baseData.add(new StructMenu(2, 0, "Menu 2"));
baseData.add(new StructMenu(3, 0, "Menu 3"));
baseData.add(new StructMenu(4, 1, "Menu 4"));
baseData.add(new StructMenu(5, 1, "Menu 5"));
baseData.add(new StructMenu(6, 2, "Menu 6"));
baseData.add(new StructMenu(7, 2, "Menu 7"));
baseData.add(new StructMenu(8, 2, "Menu 8"));
baseData.add(new StructMenu(9, 3, "Menu 9"));
baseData.add(new StructMenu(10, 3, "Menu 10"));
load(0);
}
public static void load(int parentId) {
menuData.clear();
for (int i = 0; i < baseData.size(); i++) {
if (baseData.get(i).parentId == parentId) {
menuData.add(baseData.get(i));
}
}
}
public static int getNewParentId(int currentParentId) {
for (int i = 0; i < baseData.size(); i++) {
if (baseData.get(i).id == currentParentId) {
return baseData.get(i).parentId;
}
}
return 0;
}
}
کلاس AdapterBase
public class AdapterBase extends ArrayAdapter<StructMenu> {
public AdapterBase(ArrayList<StructMenu> array) {
super(G.context, R.layout.adapter_menu, array);
}
private static class ViewHolder {
public TextView txtName;
public ViewHolder(View view) {
txtName = (TextView) view.findViewById(R.id.txtName);
}
public void fill(ArrayAdapter<StructMenu> adapter,
final StructMenu item, final int position) {
txtName.setText(item.name);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructMenu item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_menu, parent,
false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
کلاس StructMenu
public class StructMenu {
public StructMenu(int _id, int _parentId, String _name) {
id = _id;
parentId = _parentId;
name = _name;
}
public int id;
public int parentId;
public String name;
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .