这个问题已经被打了一百万次,但遗憾的是,没有回答SO有助于解决我的问题。
从根本上说,我的问题是RecyclerView
CardView
Fragment
, 和 其中 应执行以下任务:
RecyclerView
的适配器RecyclerView
的{{1}} 我的实施中的notifyfDataSetChanged()
目前只回拨RecyclerView
。 getItemCount()
和onCreateViewHolder()
永远不会被回电。
(我已经看到this answer和更多了。)
以下是其完成方式的顺序:
onBindViewHolder()
实例化AppCompatActivity
Fragment
的布局包含Fragment
,其中包含工具栏和RelativeLayout
的{{1}}标记。 include
布局包含另一个ViewPager
标记,用于在ViewPager
中设置include
的布局。 RecyclerView
的布局XML在LinearLayout
的适配器中设置:
CardView
任何布局都没有RecyclerView
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
Log.wtf(LOG_TAG, "Inside onCreateViewHolder()");
View myView;
LayoutInflater inflater;
inflater = LayoutInflater.from(parent.getContext());
myItemView = inflater.inflate(R.layout.my_row_layout, parent, false);
MyViewHolder myViewHolderItem = new MyViewHolder(myItemView);
return myViewHolderItem;
}
的{{1}}调用从服务器获取数据的方法ScrollView
Fragment
onCreate()
中的另一种方法将本地数据过滤为public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Some cache processing
args = getArguments();
myDBHelper = MyDBHelper.getInstance(getActivity());
Intent intent = getActivity().getIntent();
// Search comes from search intent
if (intent.getBooleanExtra(MyContract.MY_SEARCH_REQUEST, false))
{
...
getDataFromCloud("", true);
getDataFromLocalDB(false, item);
} // of if search intent
// Plain intent
else
{
getDataFromCloud("item", false);
getDataFromLocalDB(true, item);
}
} // of onCreate()
Fragment
最终会在onCreate()
- ArrayList
组合中显示给用户。 ArrayList
中调用RecyclerView
。但事实是,它在任何被调用的地方都无法发挥作用。此外,适配器在CardView
的{{1}}中实例化,从notifyDataSetChanged()
为本地数据库创建onActivityCreated()
。以下是运行应用程序时产生的日志:
onPostExecute()
在上面的日志中,AsyncTask
查询提取服务器数据,ArrayList
查询处理如此获取的本地数据。
我在CardView
和01-03 08:47:34.546 13489-14033/com.my A/MyDBHelper class: Create View-1 query: CREATE VIEW
01-03 08:47:34.562 13489-13489/com.my A/MyFragment: getItemCount: 0
01-03 08:47:34.584 13489-14033/com.my A/MyDBHelper class: Create View-2 query: CREATE TABLE
01-03 08:47:34.638 13489-13489/com.my A/MyFragment: getItemCount: 0
01-03 08:47:34.722 13489-13489/com.my A/MyFragment: getItemCount: 2
01-03 08:47:34.743 13489-13489/com.my A/MyFragment: getItemCount: 2
中有日志语句。如上所述,尽管来自View-1
的正回报是View-2
的大小,但这些方法并未被调用。应用程序只显示工具栏和空白卡,尽管有两个记录或项目要显示。
过去几天一直在盯着这些日志,没有任何进展或线索。非常感谢您的专家建议或指导(以及为了保存我的理智留下的东西)!
答案 0 :(得分:1)
最后,Jared Burrows's advice驱使棺材里钉了最后一颗钉子。 BoyOboy,唯一正确的方法是战斗! ( ......几乎总是!)
虽然我无法确定出错的地方,但这就是我重新做的事情:
RecyclerView
中仅使用 CardView
- Fragment
组合创建了一个全新的项目。从它带来的清晰度来看,非常值得花时间和精力。ListView
实现,先将CardView
权限改为ListView
RecyclerView
有了全新的理解,系统地将所有ListView
代码替换为RecyclerView
对应RecyclerAdapter
和ViewHolder
现在就位于他们自己的独立课程中"RecyclerView: No Adapter attached; skipping layout”
错误而被卡住了几个小时; Fragment
中没有出现任何内容。那是Jared Burrows's advice投入的时候。 RecyclerView
正在寻找所有笨拙的海鲂,等待掀起下一个挑战:动画!