如何将自定义arraylist从片段传递到活动

时间:2017-02-26 08:34:27

标签: android

在片段---我的RecyclerViewAdapter点击

ImageRecycleAdapter.OnImageClicklistener onImageClicklistener=new ImageRecycleAdapter.OnImageClicklistener() {
        @Override
        public void onItemClicks(View view, int position) {
        Log.e("onitemclic image",""+position);

          OnimageUrlPass  onimageUrlPass=(OnimageUrlPass)getContext();
            onimageUrlPass.getUrllist(image_final);

            Intent intent=new Intent(getContext(),ImagePagerAct.class);
            startActivity(intent);

        }
    };

片段中的接口

 public interface OnimageUrlPass{
        void getUrllist(ArrayList<ImageUrl> url);
    }

在“活动实施”

public class ImagePagerAct extends AppCompatActivity implements ImageFag.OnimageUrlPass{}

在“活动实施方法”

@Override
public void getUrllist(ArrayList<ImageUrl> url) {
    this.imageUrl=url;
}

错误

   java.lang.ClassCastException: com.example.user.newsweats.UI.MainAct cannot be cast to com.example.user.newsweats.frag.ImageFag$OnimageUrlPass

2 个答案:

答案 0 :(得分:3)

将数据从活动发送到片段有两种不同的方法。 使用工厂方法创建时,将数据作为参数传递。

通过工厂方法:

public static SimpleFragment getInstance(Bundle bundle) {
    SimpleFragment simpleFragment = new SimpleFragment();
    simpleFragment.setArguments(bundle)
    return simpleFragment;
}

通过这种方法,你可以传递像字符串这样的简单对象。

但是,您可以通过将该对象转换为可解析的方式来传递一些复杂的对象。

     new Bundle().putParcelable("Key", ParcebleObject);

通过界面

使用界面,您几乎可以传递任何数据。 创建一个接口,在我的例子中,我创建了一个名为SomeEventListener的接口。

  

接口

public interface SomeEventListener {
   public onSomeEventHappened(ArrayList<String> arrayListOfString);
}
  

片段类

public class SimpleFragment extends Fragment implement SomeEventHappened {
    public interface onSomeEventListener {

    private ArrayList<String> arrayList;


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
       View v = inflater.inflate(R.layout.fragment2, null);

      //..........
      return v;
    }

   public onSomeEventHappened(ArrayList<String> arrayListOfString) {
   this.arrayList = arrayListOfString;
   }
 }
  

在您的MainActivity.java文件中

 public class MainActivity extends AppCompatActivity {
    @override
    public void onCreate(Bundle savedInstanceState) {
      //........
      ArrayList<String> array = new ArrayList<>();
      SimpleFragment fragment = new SimpleFragment();
      SomeEventListener listener = fragment.getEventListener();
      listener.onSomeEventHappened(array);
 }

这适用于任何类型的物体。

答案 1 :(得分:2)

您似乎将错误的Context对象放到了RecyclerViewAdapter构造函数中。这就是getContext返回的对象永远不能转换为OnimageUrlPass接口的原因。尝试使用ImagePagerActnew RecyclerViewAdapter(this)内调用适配器构造函数。