Java 为什么我会得到一个“a”;无法解析方法“;getApplication上的错误?
我相信我已经把所有的代码整理好了,但是我已经为这个错误苦读了几个小时了。我正在尝试使用片段设置一个基本的应用程序框架。如果我将项目结构为基于活动,并将字符串数据与下面的代码块一起放在MainActivity中,我就可以让代码正常工作,但这无助于我将它们移动到片段中 在MainActivity中(相同的代码块在不使用片段的情况下工作),它被放置在onCreate中,但如果我将其放置在片段中,并且我了解到将其放置在onCreate中不是正确的位置,则没有什么区别 我是Android开发的新手,如果你能用一个代码示例来解释你的答案,那将非常有帮助 谢谢你抽出时间来看我 我的整个片段在下面Java 为什么我会得到一个“a”;无法解析方法“;getApplication上的错误?,java,android,android-fragments,syntax-error,Java,Android,Android Fragments,Syntax Error,我相信我已经把所有的代码整理好了,但是我已经为这个错误苦读了几个小时了。我正在尝试使用片段设置一个基本的应用程序框架。如果我将项目结构为基于活动,并将字符串数据与下面的代码块一起放在MainActivity中,我就可以让代码正常工作,但这无助于我将它们移动到片段中 在MainActivity中(相同的代码块在不使用片段的情况下工作),它被放置在onCreate中,但如果我将其放置在片段中,并且我了解到将其放置在onCreate中不是正确的位置,则没有什么区别 我是Android开发的新手,如果你
public class BasicsPageFragment extends Fragment {
RecyclerView recyclerView;
private Recycler_View_Adapter adapter;
public BasicsPageFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this
View rootView = inflater.inflate(R.layout.recycler_view, container, false);
RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.fragment_container);
rv.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
return rootView;
}
@Override
protected void onViewCreated(Bundle savedInstanceState) {
// below I am receiving an error (cannot resolve method 'getApplication()'
// the line of code above it is also throwing "getView() in Fragment cannot be applied"
// and savedInstanceState says "OnViewCreated (android.view.View, Bundle)
// in Fragment cannot be applied to (android.os.Bundle)"
super.onViewCreated(savedInstanceState);
List<CardviewData> data = fill_with_data();
recyclerView = (RecyclerView) getView(R.id.fragment_container);
adapter = new Recycler_View_Adapter(data, getApplication());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// errors stop here
}
//Create a list of CardviewData objects
public List<CardviewData> fill_with_data() {
List<CardviewData> data = new ArrayList<>();
data.add(new CardviewData("Batman vs Superman", "Following the destruction of Metropolis, Batman embarks on a personal vendetta against Superman ", R.drawable.ic_action_movie));
data.add(new CardviewData("X-Men: Apocalypse", "X-Men: Apocalypse is an upcoming American superhero film based on the X-Men characters that appear in Marvel Comics ", R.drawable.ic_action_movie));
data.add(new CardviewData("Captain America: Civil War", "A feud between Captain America and Iron Man leaves the Avengers in turmoil. ", R.drawable.ic_action_movie));
data.add(new CardviewData("Kung Fu Panda 3", "After reuniting with his long-lost father, Po must train a village of pandas", R.drawable.ic_action_movie));
data.add(new CardviewData("Warcraft", "Fleeing their dying home to colonize another, fearsome orc warriors invade the peaceful realm of Azeroth. ", R.drawable.ic_action_movie));
data.add(new CardviewData("Alice in Wonderland", "Alice in Wonderland: Through the Looking Glass ", R.drawable.ic_action_movie));
return data;
}
}
公共类BasicsPageFragment扩展了片段{
回收视图回收视图;
私人回收站\u视图\u适配器;
公共基本页面片段(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为此目的对布局进行充气
视图根视图=充气机。充气(R.layout.recycler\u视图,容器,假);
RecyclerView rv=(RecyclerView)rootView.findViewById(R.id.fragment\u容器);
rv.setHasFixedSize(真);
LinearLayoutManager llm=新的LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
返回rootView;
}
@凌驾
创建视图时受保护的无效(捆绑保存状态){
//下面我收到一个错误(无法解析方法'getApplication()'
//上面的代码行也抛出“片段中的getView()无法应用”
//savedInstanceState说“OnViewCreated(android.view.view,Bundle)
//in片段不能应用于(android.os.Bundle)”
super.onViewCreated(savedInstanceState);
列表数据=用_数据()填充_;
recyclerView=(recyclerView)getView(R.id.fragment\u容器);
adapter=新的回收器\视图\适配器(数据,getApplication());
recyclerView.setAdapter(适配器);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
//错误到此为止
}
//创建CardviewData对象的列表
公共列表用_数据填写_(){
列表数据=新的ArrayList();
data.add(新的CardviewData(“蝙蝠侠vs超人”,“大都会被摧毁后,蝙蝠侠与超人展开了个人仇杀”,R.drawable.ic_动作电影));
data.add(新的CardviewData(“X战警:启示录”,“X战警:启示录”是一部即将上映的美国超级英雄电影,基于惊奇漫画中出现的X战警角色),R.drawable.ic_action_电影);
data.add(新的CardviewData(“美国队长:内战”,“美国队长和钢铁侠之间的世仇让复仇者陷入混乱”,R.drawable.ic_action_movie));
data.add(新的CardviewData(“功夫熊猫3”,“与失散多年的父亲团聚后,阿宝必须训练一个熊猫村”,R.drawable.ic_动作电影));
data.add(新的CardviewData(“魔兽”,“逃离他们垂死的家园去殖民另一个,可怕的兽人战士入侵和平的艾泽拉斯王国”,R.drawable.ic_action_movie));
添加(新的CardviewData(“爱丽丝梦游仙境”,“爱丽丝梦游仙境:透过镜子”,R.drawable.ic_action_movie));
返回数据;
}
}
如果您需要适配器
public class Recycler_View_Adapter extends RecyclerView.Adapter<CardviewViewHolder> {
List<CardviewData> list = Collections.emptyList();
Context context;
public Recycler_View_Adapter(List<CardviewData> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public CardviewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout, parent, false);
CardviewViewHolder holder = new CardviewViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(CardviewViewHolder holder, int position) {
holder.title.setText(list.get(position).title);
holder.description.setText(list.get(position).description);
holder.imageView.setImageResource(list.get(position).imageId);
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
// Insert a new item to the RecyclerView
public void insert(int position, CardviewData data) {
list.add(position, data);
notifyItemInserted(position);
}
// Remove a RecyclerView item containing the CardviewData object
public void remove(CardviewData data) {
int position = list.indexOf(data);
list.remove(position);
notifyItemRemoved(position);
}
}
公共类回收器\u视图\u适配器扩展了RecyclerView.Adapter{
List=Collections.emptyList();
语境;
公共回收器\视图\适配器(列表、上下文){
this.list=列表;
this.context=上下文;
}
@凌驾
公共卡ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.cardview\u布局,parent,false);
CardViewHolder=新的CardViewHolder(v);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(CardViewHolder,内部位置){
holder.title.setText(list.get(position.title));
holder.description.setText(list.get(position.description));
holder.imageView.setImageResource(list.get(position.imageId));
}
@凌驾
public int getItemCount(){
返回list.size();
}
@凌驾
附加ToRecyclerView(RecyclerView RecyclerView)上的公共无效{
super.onAttachedToRecyclerView(recyclerView);
}
//将新项目插入到RecyclerView
公共空白插入(int位置,CardviewData){
列表。添加(位置、数据);
(位置);
}
//删除包含CardviewData对象的RecyclerView项
公共作废删除(CardviewData){
int position=list.indexOf(数据);
列表。删除(位置);
已移除(位置)的项目;
}
}
您必须在片段中使用getActivity()而不是getApplicationContext()。它会起作用的!!使用
从文件中
getApplicationContext()返回单个全局
当前流程的应用程序对象,通常仅当您需要一个其生命周期与当前上下文分离的上下文时,才应使用该上下文,该上下文与流程的生命周期而不是当前组件相关联
换行
adapter = new Recycler_View_Adapter(data, getApplication());
对此
adapter = new Recycler_View_Adapter(data, getActivity());
使用getApplicationContext()而不是getApplication()@绿色