PDA

View Full Version : مشکل در switch case درون یک لیست ویو



ُSaeed0421
دوشنبه 29 شهریور 1395, 20:14 عصر
سلام دوستان خسته نباشید من میخوام از دستور switch case در لیست ویویی که دارم استفاده کنم.قبلا این کارو انجام دادم اما چون این اکتیویتی من قسمت search هم داره یکم برام دشوار شده.اگه امکانش هست راهنماییم کنید.کد برنامم:
(در قمت نوشتن switch case مشکل ندارم اون قسمت قبلش که باید setItem کردو مشکل دارم)



protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.buttonone);


listView = (ListView) findViewById(R.id.listView);
postArrayList = new ArrayList<>();
postArrayList.add(new Post("Dummy Title", "Dummy Sub Title"));
postArrayList.add(new Post("Searchview in actionbar", "enjoy search functionality from actionbar in android"));
postArrayList.add(new Post("Search in listview", "search feature that filter listview item"));
postArrayList.add(new Post("Android Search Bar", "adding search feature in toolbar using appcompat library"));
postArrayList.add(new Post("Android Studio SearchView example", "Android SearchView tutorial in android studio"));
postArrayList.add(new Post("Android Tutorial", "Get latest android material with simple solution"));
postArrayList.add(new Post("nkDroid tutorials", "A to Z Android tutorials at one place"));


myAppAdapter = new MyAppAdapter(postArrayList, ButtonOne.this);
listView.setAdapter(myAppAdapter);

}






public class MyAppAdapter extends BaseAdapter {

public class ViewHolder {
TextView txtTitle, txtSubTitle;


}

public List<Post> parkingList;

public Context context;
ArrayList<Post> arraylist;

private MyAppAdapter(List<Post> apps, Context context) {
this.parkingList = apps;
this.context = context;
arraylist = new ArrayList<Post>();
arraylist.addAll(parkingList);

}

@Override
public int getCount() {
return parkingList.size();
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

View rowView = convertView;
ViewHolder viewHolder;

if (rowView == null) {
LayoutInflater inflater = getLayoutInflater();
rowView = inflater.inflate(R.layout.list_item, null);
// configure view holder
viewHolder = new ViewHolder();
viewHolder.txtTitle = (TextView) rowView.findViewById(R.id.title);
viewHolder.txtSubTitle = (TextView) rowView.findViewById(R.id.subtitle);
rowView.setTag(viewHolder);

} else {
viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.txtTitle.setText(parkingList.get(positi on).getPostTitle() + "");
viewHolder.txtSubTitle.setText(parkingList.get(pos ition).getPostSubTitle() + "");
return rowView;


}

public void filter(String charText) {

charText = charText.toLowerCase(Locale.getDefault());

parkingList.clear();
if (charText.length() == 0) {
parkingList.addAll(arraylist);

} else {
for (Post postDetail : arraylist) {
if (charText.length() != 0 && postDetail.getPostTitle().toLowerCase(Locale.getDe fault()).contains(charText)) {
parkingList.add(postDetail);
} else if (charText.length() != 0 && postDetail.getPostSubTitle().toLowerCase(Locale.ge tDefault()).contains(charText)) {
parkingList.add(postDetail);
}
}
}
notifyDataSetChanged();
}
}

Nevercom
سه شنبه 30 شهریور 1395, 01:50 صبح
تو این کد که جایی از از switch استفاده نشده.
چه مشکلی با switch دارید ؟ اگر خطایی میده جزئیات خطا چی هست ؟
کجای کد و به چه منظوری میخواید استفاده کنید ؟

ُSaeed0421
سه شنبه 30 شهریور 1395, 02:58 صبح
مشکل اولم این بود که نمیدونستم کجا دستور swith case رو بنویسم.این مشکلم حل شد و دستور رو وارد کدم کردم.اما یه مشکل دیگه پیش اومد برام اونم این که چون من جستجو در این اکتویتی قرار دادم اگه به case به صورت"0"و "1"و"2" و... بدم صفحات مربوط به هر آیتم رو جا به جا نشون میده(در صورت سرچ کردن).یعنی در حالت عادی آیتم اول صفحه ی اولو نشون میده و آیتم دوم صفحه ی دوم و همینطور تا آخر اما اگه سرچ انجام بشه و مثلا آیتم سوم و چارم رو فقط نشون بده در این صورت با انتخاب آیتم سوم چون در صدر قرار گرفته به صفحه ی اول هدایت میشه.
به نظرن باید به جای 0 و 1 و 2 و... در case از مورد دیگه ای استفاده کنم.

@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buttonone);


listView = (ListView) findViewById(R.id.listView);

listView.setOnItemClickListener(new onItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
switch (position){
case 0:
startActivity(new Intent(ButtonOne.this, ActivityOne.class));

break;
case 1:
startActivity(new Intent(ButtonOne.this, ActivityTwo.class));

break;

}


}
});

postArrayList = new ArrayList<>();
postArrayList.add(new Post("Dummy Title", "Dummy Sub Title"));
postArrayList.add(new Post("Searchview in actionbar", "enjoy search functionality from actionbar in android"));
postArrayList.add(new Post("Search in listview", "search feature that filter listview item"));
postArrayList.add(new Post("Android Search Bar", "adding search feature in toolbar using appcompat library"));
postArrayList.add(new Post("Android Studio SearchView example", "Android SearchView tutorial in android studio"));
postArrayList.add(new Post("Android Tutorial", "Get latest android material with simple solution"));
postArrayList.add(new Post("nkDroid tutorials", "A to Z Android tutorials at one place"));

ُSaeed0421
سه شنبه 30 شهریور 1395, 16:56 عصر
فکر کنم اگه از دستور if else استفاده کنم بشه.من الان این کد زیر رو وارد برنامم کردم.پیغام خطایی نمیده و برنامه اجرا میشه اما روی آیتم های لیست که کلیک میکنم اتفاقی صورت نمیگیره

if (myAppAdapter.getItem(position).equals("Dummy Title")) { startActivity(new Intent(ButtonOne.this, ActivityOne.class));
} else if (myAppAdapter.getItem(position).equals("Searchview in actionbar")) {
startActivity(new Intent(ButtonOne.this, ActivityTwo.class));
}

Nevercom
چهارشنبه 31 شهریور 1395, 11:01 صبح
شئ Post رو به شکلی تغییر بدید که یک فیلد برای id داشته باشه. الان متدی با نام getPostTitle دارید که عنوان پست رو بر میگردونه، به همین شکل متدی مثل getPostId هم باید id پست رو برگردونه.
به هر پست یک id منحصربفرد بدید. و در switch هم بر اساس id بین صفحات جابجا بشید. چون position موقعیت اون آیتم در لیست رو نمایش میده.

ُSaeed0421
چهارشنبه 31 شهریور 1395, 21:56 عصر
دمت گرم خیلی خیلی ممنون.حله داداش.:تشویق: