Java 片段中的回收视图
我正在一个Java 片段中的回收视图,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我正在一个Fragment内设置一个RecyclerView,以Android文档为例 我把代码贴在下面,没有太多。(唯一的区别是我使用的是片段而不是活动) 我得到的错误是: java.lang.IllegalStateException:指定的子级已具有父级。必须首先对孩子的家长调用removeView()。 在线解决此问题的所有方法都是在fragment的布局膨胀中添加false参数。但我已经这样做了,我仍然得到错误 我的代码: main活动 ... mFragmentManager = g
Fragment
内设置一个RecyclerView
,以Android文档为例
我把代码贴在下面,没有太多。(唯一的区别是我使用的是片段而不是活动)
我得到的错误是:
java.lang.IllegalStateException:指定的子级已具有父级。必须首先对孩子的家长调用removeView()。
在线解决此问题的所有方法都是在fragment的布局膨胀中添加false
参数。但我已经这样做了,我仍然得到错误
我的代码:
main活动
...
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.containerView,new NewsFragment()).commit();
...
新闻片段
public class NewsFragment extends Fragment {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.news_layout,container, false);
mRecyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new NewsAdapter(new String[]{"hello","world","qwert","test","greg","peck"});
mRecyclerView.setAdapter(mAdapter);
return v;
}
}
新闻适配器
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private String[] mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(TextView tv) {
super(tv);
mTextView = tv;
}
}
public NewsAdapter(String[] myDataset) {
mDataset = myDataset;
}
@Override
public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_item, parent, false);
TextView tv = (TextView)v.findViewById(R.id.textView2);
ViewHolder vh = new ViewHolder(tv);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
}
@Override
public int getItemCount() {
return mDataset.length;
}
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图mTextView;
公共取景器(TextView tv){
超级(电视);
mTextView=tv;
}
}
公共新闻适配器(字符串[]myDataset){
mDataset=myDataset;
}
@凌驾
public NewsAdapter.ViewHolder onCreateViewHolder(视图组父级、,
int视图类型){
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.news\u项,父项,假);
TextView tv=(TextView)v.findViewById(R.id.textView2);
ViewHolder vh=新的ViewHolder(电视);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.mTextView.setText(mDataset[position]);
}
@凌驾
public int getItemCount(){
返回mDataset.length;
}
}
任何帮助都将不胜感激 错误在这一行:
TextView tv = (TextView)v.findViewById(R.id.textView2);
ViewHolder vh = new ViewHolder(tv);
将其更改为:
TextView tv = (TextView)v.findViewById(R.id.textView2);
ViewHolder vh = new ViewHolder(v);
文本视图已具有父视图。这就是为什么会出现这个错误
更新代码:
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private String[] mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view) {
super(tv);
mTextView= (TextView)view.findViewById(R.id.textView2);
}
}
public NewsAdapter(String[] myDataset) {
mDataset = myDataset;
}
@Override
public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
}
@Override
public int getItemCount() {
return mDataset.length;
}
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图mTextView;
公共视图持有者(视图){
超级(电视);
mTextView=(TextView)view.findViewById(R.id.textView2);
}
}
公共新闻适配器(字符串[]myDataset){
mDataset=myDataset;
}
@凌驾
public NewsAdapter.ViewHolder onCreateViewHolder(视图组父级、,
int视图类型){
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.news\u项,父项,假);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.mTextView.setText(mDataset[position]);
}
@凌驾
public int getItemCount(){
返回mDataset.length;
}
}
错误在这一行:
TextView tv = (TextView)v.findViewById(R.id.textView2);
ViewHolder vh = new ViewHolder(tv);
将其更改为:
TextView tv = (TextView)v.findViewById(R.id.textView2);
ViewHolder vh = new ViewHolder(v);
文本视图已具有父视图。这就是为什么会出现这个错误
更新代码:
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private String[] mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view) {
super(tv);
mTextView= (TextView)view.findViewById(R.id.textView2);
}
}
public NewsAdapter(String[] myDataset) {
mDataset = myDataset;
}
@Override
public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
}
@Override
public int getItemCount() {
return mDataset.length;
}
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图mTextView;
公共视图持有者(视图){
超级(电视);
mTextView=(TextView)view.findViewById(R.id.textView2);
}
}
公共新闻适配器(字符串[]myDataset){
mDataset=myDataset;
}
@凌驾
public NewsAdapter.ViewHolder onCreateViewHolder(视图组父级、,
int视图类型){
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.news\u项,父项,假);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.mTextView.setText(mDataset[position]);
}
@凌驾
public int getItemCount(){
返回mDataset.length;
}
}
在哪一行抛出异常??没有直接引用代码中的特定行。。。错误与此完全相同:您需要使用断点进行调试,查看哪个视图的附加操作正在抛出异常在哪一行抛出异常??在我的代码中没有对特定行的直接引用。。。错误与此完全相同:您需要使用断点进行调试,查看哪个视图的附加操作引发异常,但是我的
ViewHolder
构造函数需要TextView
参数。我是否应该将其改回View
参数,并在构造函数内转换为TextView
?是的。之后它将工作。原因是textview已经有父项。但是我的ViewHolder
构造函数需要textview
参数。我是否应该将其改回View
参数,并在构造函数内转换为TextView
?是的。之后它将工作。原因是textview已具有父级。