آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

بروز رسانی لیست ویو با کلیک روی آیتم های آن [حل شد]

PandaStudio  12 سال پیش  12 سال پیش
+1 0

سلام دوستان

من لیستی از عناوین دارم که هر عنوان چندین زیرعنوان داره. لیست عناوین را دقیقا با همون روش لیست ویو که استاد گفتن پیاده سازی کردم. حالا می خوام با کلیک روی هرکدام از آیتم ها لیست ویو مجددا بارگذاری بشه و اینبار زیرعنوان ها را نشون بده و با زدن دکمه بک ( که میتونه این دکمه هم توی صفحه نمایش لیست ویو قرار داده بشه) مجددا همون عناوین اصلی نمایش داده بشه.

برای اینکار به ذهنم رسید توی 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"));
            }
        

اما متاسفانه لیست ویو با مقادیر زیر عنوان بروز نمیشه

کلا لپ مطلب اینه که میخوام با انتخاب هر آیتم لیست ویو زیر عنوان ها را بم نشون بده و با زدن بک مجدد لیست عنوان ها را بم نشون بده.

ممنون میشم راهنماییم کنید.

0 0
ولی Fragment جون میده واسه این کارا (12 سال پیش)
0 0
آره اما این مورد که من دنبالش بودم خاص بود :-) (12 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
محمد حسین زاده  12 سال پیش
+3 0

مثال زیر رو امتحان کنید :

 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;
}

0 0
ممنون دوست عزیز. نکته مهمی که از این کد یاد گرفتم این بود که اگه میخوام با کلیک روی آیتم ها از نو لیست را بروز کنم بجای کلیک لیسنر برای لایه دربرگیرنده محتوی یک آیتم درون Adapter باید از متد setOnItemClickListener درون اکتیویتی دربرگیرنده لیست ویو استفاده کنم. (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .