从片段开始活动

Start Acitvity from Fragment

我用 ViewPagerFragmentPagerAdapter 得到了我的 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 可能不会对您的情况造成伤害。