从片段开始活动
Start Acitvity from Fragment
我用 ViewPager
和 FragmentPagerAdapter
得到了我的 MainActivity(FragmentActivity)
,它创建了 OrdersFragment
,其中我有 ListView
。现在我想开始新的 Activity OnItemClickListener
但我不知道该怎么做。
这是OrdersFragment
class:
public class OrdersFragment extends Fragment {
ListView lv;
private ArrayList<Order> d = new ArrayList<Order>();
private ordersAdapter adapter;
public OrdersFragment (){
}
public OrdersFragment setArguments(ArrayList<Order> orders){
if(adapter == null) return this;
adapter.setData(orders);
Log.d("fragment", "zmiana");
adapter.notifyDataSetChanged();
return this;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
//d.add(new Order());
Log.d("fragment", "orders fragment created" + d.toString());
lv = (ListView) inflater.inflate(R.layout.orders_list, container, false);
lv.setOnItemClickListener(itemClicked);
adapter = new ordersAdapter(inflater, d);
lv.setAdapter(adapter);
return lv;
}
public ArrayList<Order> getOrders(){
return d;
}
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(OrdersFragment.this, OrderActivity.class));
}
};
}
它说 Intent 构造函数是未定义的,当我移动到 startActivity 时它说 Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.
它说这个函数是在 android.support.v4.app.Fragment.startActivity
中定义的,但我确实导入这个:
import android.app.Activity;
import android.content.Intent;
我做错了什么?
在 Fragment
中,我们必须将上下文作为 getActivity()
传递,将您的代码替换为下面的代码即可。
OnItemClickListener itemClicked = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
};
尝试将上下文作为 getActivity()
传递给 intent
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
};
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(getActivity() != null) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
}
};
getActivity() 将为您提供 Activity 上下文,您可以使用它来启动新的 Activity。在极少数情况下,getActivity() 可以 return null 因此检查 getActivity() 是否为 null 可能不会对您的情况造成伤害。
我用 ViewPager
和 FragmentPagerAdapter
得到了我的 MainActivity(FragmentActivity)
,它创建了 OrdersFragment
,其中我有 ListView
。现在我想开始新的 Activity OnItemClickListener
但我不知道该怎么做。
这是OrdersFragment
class:
public class OrdersFragment extends Fragment {
ListView lv;
private ArrayList<Order> d = new ArrayList<Order>();
private ordersAdapter adapter;
public OrdersFragment (){
}
public OrdersFragment setArguments(ArrayList<Order> orders){
if(adapter == null) return this;
adapter.setData(orders);
Log.d("fragment", "zmiana");
adapter.notifyDataSetChanged();
return this;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
//d.add(new Order());
Log.d("fragment", "orders fragment created" + d.toString());
lv = (ListView) inflater.inflate(R.layout.orders_list, container, false);
lv.setOnItemClickListener(itemClicked);
adapter = new ordersAdapter(inflater, d);
lv.setAdapter(adapter);
return lv;
}
public ArrayList<Order> getOrders(){
return d;
}
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(OrdersFragment.this, OrderActivity.class));
}
};
}
它说 Intent 构造函数是未定义的,当我移动到 startActivity 时它说 Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.
它说这个函数是在 android.support.v4.app.Fragment.startActivity
中定义的,但我确实导入这个:
import android.app.Activity;
import android.content.Intent;
我做错了什么?
在 Fragment
中,我们必须将上下文作为 getActivity()
传递,将您的代码替换为下面的代码即可。
OnItemClickListener itemClicked = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
};
尝试将上下文作为 getActivity()
传递给 intent
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
};
OnItemClickListener itemClicked = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(getActivity() != null) {
Log.d("fragment", "clicked!!" + parent.getItemAtPosition(position).toString());
startActivity(new Intent(getActivity(), OrderActivity.class));
}
}
};
getActivity() 将为您提供 Activity 上下文,您可以使用它来启动新的 Activity。在极少数情况下,getActivity() 可以 return null 因此检查 getActivity() 是否为 null 可能不会对您的情况造成伤害。