رفتن از فرگمت به اکتیوتی در لیست ویو
سلام
من پروژه google play آقای کاشی زاده ادامه دادم در بخش سه فیلم آموزشی از item در فرگمن استفاده نکردم از لیست ویو به همون شکلی استاد یاد داده استفاده کردم حالا می خوام با کلیک کردن بروی یکی از اون item های لیست ویو به Activiy مورد نظرم برم.
مشکل این جاست که که اگر در تابع fill کلاس adpter کد مربوطه بنویسم احتیاج دارم به تابع getActiviy() که چون کلاس adpter از کلاس fragment اکستنز نشده این تابع وجود نداره اگر در تابع onActivityCreated() خود fragment استفاده کنم برنامه کرش می کنه.
من هم می خوام از فرگمت به اکتیوتی برم و بعض از جاها از فرگمت به فرگمت.
public class AdapterPost extends ArrayAdapter<StrcutPost> {
public AdapterPost(ArrayList<StrcutPost> array) {
super(G.context, R.layout.item_post, array);
}
private static class ViewHolder {
public ViewGroup layPost;
public TextView txtTitlePost;
public TextView txtTextPost;
public TextView txtAuthorPost;
public TextView txtDatePublished;
public ImageView imgPost;
public ViewHolder(View view) {
layPost = (ViewGroup) view.findViewById(R.id.layPost);
txtTitlePost = (TextView) view.findViewById(R.id.txtTitlePost);
txtTextPost = (TextView) view.findViewById(R.id.txtTextPost);
txtAuthorPost = (TextView) view.findViewById(R.id.txtAuthorPost);
txtDatePublished = (TextView) view.findViewById(R.id.txtDatePublished);
imgPost = (ImageView) view.findViewById(R.id.imgPost);
}
public void fill(final ArrayAdapter<StrcutPost> adapter, final StrcutPost item, final int position)
{
txtTitlePost.setText(item.titlePost);
txtTextPost.setText(item.textPost);
txtAuthorPost.setText(item.authorPost);
/* آیا این جا باید بنویسم؟چه کدی بنویسم*/
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StrcutPost item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.item_post, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
public class FragmentHome extends Fragment {
public ArrayAdapter adapter;
private ViewGroup layout;
public static Fragment instance()
{
Fragment fragment = new FragmentHome();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
layout = (ViewGroup) G.inflater.inflate(R.layout.frm_fragment_home, null);
return layout;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
ListView lstPost = (ListView) layout.findViewById(R.id.lstPost);
adapter = new AdapterPost(G.posts);
lstPost.setAdapter(adapter);
for (int i = 0; i < 10; i++)
{
StrcutPost post = new StrcutPost();
post.titlePost = "Title " + i;
post.textPost = "Text " + i;
post.authorPost = "author " + i;
G.posts.add(post);
}
adapter.notifyDataSetChanged();
/* آیا این جا باید بنویسم؟چه کدی بنویسم*/
}
}
میتونید به این شکل از اداپتر لیست ویو که درون یک فرگمنت هست به یک اکتیویتی دیگر برید :
Intent intent = new Intent(G.context, ActivityNews.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
ممنون از جوابتون
لایه مورد نظر که باید روش کلیک بشه تا اکتیوتی نشون داده بشه در کلاس AdapterPost اسمش layPost که بصورت یک فیلد public static تعریفش کردم و در کلاس FragmentHome اینو به آخرش اضافه کردم
AdapterPost.layPost.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.context, ActivityPost.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
}
});
اما برنامه کرش کرد در داخل logcat از خط AdapterPost.layPost.setOnClickListener(new OnClickListener() { ایراد میگیره ایرادش nullpointerException هست
layPost به حلت قبلش برگردونم و در کلاس adpter در متد fill اینو اضافه کردم
layPost.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.context, ActivityPost.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.context.startActivity(intent);
}
});
اما وقتی روی لایه کلیک می کنم کرش می کنه در داخل logcat از خط G.context.startActivity(intent); ایراد میگیره
سلام
متاسفانه کرش می کنه
من سورس پروژه می ذارم تا بیشتر در جریان باشید همون google play که آقای کاشی زاده است فقط یک list View داره می خوام روی هر کدوم از آیتم ها کلیک بشه از fragmentHome به َ ActivityPost بره من فکر کنم جواب این سوال خیلی کاربرد داشته باشه مخصوصا وقتی که بخواهیم از fragmentHome به یک fragment دیگه بریم
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .