在片段---我的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
答案 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
接口的原因。尝试使用ImagePagerAct
在new RecyclerViewAdapter(this)
内调用适配器构造函数。