只學了幾天的android開發,java也不好QAQ
現在在做學校的大作業遇到的問題求解
報錯為: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference
部分代碼:
private LinearLayoutManager LayoutManager;
private void initview() {
//獲取RecyclerView的實體
RecyclerView recyclerView =findViewById(R.id.recycler);
LayoutManager = new LinearLayoutManager(this);
LayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(LayoutManager);
MyAdapter adapter=new MyAdapter(listpic,this);
//完成adapter設定
recyclerView.setAdapter(adapter);
}
完整代碼:
package com.xxca.cherry.fragment;
import android.graphics.drawable.Drawable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.xxca.cherry.R;
import com.xxca.cherry.entity.pic;
import com.xxca.cherry.recycleView.MyAdapter;
import java.util.ArrayList;
import java.util.List;
public class firstActivity extends AppCompatActivity implements View.OnClickListener{
TextView tvmain,tvfind,tvme;
Fragment mainfragment,findfragment,mefragment;
FragmentManager fragmentManager;
private LinearLayoutManager LayoutManager;
private List<pic> listpic=new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
fragmentManager=getSupportFragmentManager();//獲取管理器
inittv();//初始化
tvmain.performLongClick();//模擬點擊
//recyclerview
getid();
//開始設定RecyclerView
initview();
}
private void initview() {
//獲取RecyclerView的實體
RecyclerView recyclerView =findViewById(R.id.recycler);
LayoutManager = new LinearLayoutManager(this);
LayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(LayoutManager);
MyAdapter adapter=new MyAdapter(listpic,this);
//完成adapter設定
recyclerView.setAdapter(adapter);
}
private void getid() {
pic pic_1=new pic(R.drawable.header_pic_ad1);
pic pic_2=new pic(R.drawable.header_pic_ad2);
listpic.add(pic_1);
listpic.add(pic_2);
}
private void inittv() {
tvmain=findViewById(R.id.tvmain);
tvfind=findViewById(R.id.tvfind);
tvme=findViewById(R.id.tvme);
tvmain.setOnClickListener(this);
tvfind.setOnClickListener(this);
tvme.setOnClickListener(this);
}
//隱藏
private void hideall(FragmentTransaction fragmentTransaction)
{
if(mainfragment!=null)fragmentTransaction.hide(mainfragment);
if(findfragment!=null)fragmentTransaction.hide(findfragment);
if(mefragment!=null)fragmentTransaction.hide(mefragment);
}
private void setnormal()
{
Drawable drawable=getResources().getDrawable(R.drawable.nav_main_normal);
//左上角起始位置,新的大小
drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvmain.setCompoundDrawables(null,drawable,null,null);
Drawable drawable2=getResources().getDrawable(R.drawable.nav_find_normal);
//左上角起始位置,新的大小
drawable2.setBounds(0,0,drawable2.getMinimumWidth(),drawable2.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvfind.setCompoundDrawables(null,drawable2,null,null);
//獲取更換的圖片
Drawable drawable3=getResources().getDrawable(R.drawable.nav_me_normal);
//左上角起始位置,新的大小
drawable3.setBounds(0,0,drawable3.getMinimumWidth(),drawable3.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvme.setCompoundDrawables(null,drawable3,null,null);
}
@Override
public void onClick(View view) {
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();//開啟事務
// Toast.makeText(firstActivity.this,"選中了",Toast.LENGTH_LONG).show();
switch (view.getId())
{
case R.id.tvmain:
setnormal();
//獲取更換的圖片
Drawable drawable=getResources().getDrawable(R.drawable.nav_main_click);
//左上角起始位置,新的大小
drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvmain.setCompoundDrawables(null,drawable,null,null);
hideall(fragmentTransaction);
MainFragment mainFragment=new MainFragment();
fragmentTransaction.add(R.id.container,mainFragment,"mainFragment");//要傳入的物件和fragment物件
fragmentTransaction.commit();
break;
case R.id.tvfind:
setnormal();
//獲取更換的圖片
Drawable drawable2=getResources().getDrawable(R.drawable.nav_find_click);
//左上角起始位置,新的大小
drawable2.setBounds(0,0,drawable2.getMinimumWidth(),drawable2.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvfind.setCompoundDrawables(null,drawable2,null,null);
hideall(fragmentTransaction);
FindFragment findFragment=new FindFragment();
fragmentTransaction.add(R.id.container,findFragment,"findFragment");//要傳入的物件和fragment物件
fragmentTransaction.commit();
break;
case R.id.tvme:
setnormal();
//獲取更換的圖片
Drawable drawable3=getResources().getDrawable(R.drawable.nav_me_click);
//左上角起始位置,新的大小
drawable3.setBounds(0,0,drawable3.getMinimumWidth(),drawable3.getMinimumHeight());
//可以在上設定圖示,不顯示的地方設定為null
tvme.setCompoundDrawables(null,drawable3,null,null);
hideall(fragmentTransaction);
MeFragment meFragment=new MeFragment();
fragmentTransaction.add(R.id.container,meFragment,"meFragment");//要傳入的物件和fragment物件
fragmentTransaction.commit();
break;
}
}
}
package com.xxca.cherry.entity;
public class pic {
private int imageId;
public pic( int imageId) {
this.imageId = imageId;
}
public int getImageId() {
return imageId;
}
}
package com.xxca.cherry.recycleView;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.xxca.cherry.R;
import com.xxca.cherry.entity.pic;
import java.util.List;
//將資料和布局item進行系結
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{//可以托管資料集合,
// 為每一項Item創建視圖并且系結資料
private LayoutInflater mInflater;
private List<pic> mpicList;
private Context mContext;
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.imag_item,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder( MyAdapter.ViewHolder holder, int position) {
pic pic1= mpicList.get(position);
holder.item_imge.setImageResource(pic1.getImageId());
}
@Override
public int getItemCount() {
return mpicList.size();
}
//承載Item視圖的子布局
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView item_imge;
public ViewHolder(View view){
super(view);
item_imge = view.findViewById(R.id.item_imge);
}
}
public MyAdapter(List<pic> picList,Context context)
{
mContext=context;
mpicList=picList;
}
}
uj5u.com熱心網友回復:
空指標錯誤很常見的Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager on a null object reference
很明顯你的
RecyclerView recyclerView =findViewById(R.id.recycler); 沒找到控制元件
uj5u.com熱心網友回復:
謝謝回復,應該是因為我是找其他布局的控制元件,之前不知道不可以這樣轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/130710.html
標籤:Android
