2017-07-20 18 views
-1

私はカスタムリストview.firstを使用したい、私は2つの変数(名前、画像)とメインリスト名前のJavaクラスを作成します。 このクラスコード:nullPointerExceptionは、カスタムリストビューマネージャを呼び出すとき

public class ListManager extends BaseAdapter { 
    private Context context; 
    private ArrayList<MainList> list; 
    private LayoutInflater inflater; 

    public ListManager(Context context, ArrayList<MainList> list) { 
     this.setContext(context); 
     this.setList(list); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return i; 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     try { 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      viewHolder viewHolder = new viewHolder(); 

      if(view == null){ 
       inflater.inflate(R.layout.list,null); 
       viewHolder.name = (TextView) view.findViewById(R.id.listTitle); 
       viewHolder.image = (ImageView) view.findViewById(R.id.listImage); 
      }else viewHolder = (viewHolder) view.getTag(); 

      if (list.size() > 0){ 
       MainList mainList = list.get(i); 
       viewHolder.name.setText(mainList.getName()); 
      } 
     }catch (Exception e){ 
      Log.i("Tag:LM", "getView: " + e.toString()); 
     } 


     return view; 
    } 

    public Context getContext() { 
     return context; 
    } 

    public void setContext(Context context) { 
     this.context = context; 
    } 

    public ArrayList<MainList> getList() { 
     return list; 
    } 

    public void setList(ArrayList<MainList> list) { 
     this.list = list; 
    } 
    private static class viewHolder{ 
     private TextView name; 
     private ImageView image; 
    } 
} 

私はちょうどテスト私のコードのためのTextViewを設定*:

public class MainList { 
    private String name; 
    private String image; 

    public MainList(String name, String image) { 
     this.setName(name); 
     this.setImage(image); 
    } 
public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 
} 

それから私は、ListManagerのクラスはBaseAdapter、このクラスのコードを拡張して作成します。後に、このクラスを作成し、リストの活動に使用し、このクラスコード:

public class ListActivity extends AppCompatActivity { 

    private ListView listView; 
    private ListManager adapter; 
    private ArrayList<MainList> arrayList; 
    private static final String TAG = "Tag:ListActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 
     try { 
      listView = (ListView) findViewById(R.id.list); 

      setData(); 

      adapter = new ListManager(this, arrayList); 

      listView.setAdapter(adapter); 
     }catch (Exception e){ 
      Log.i(TAG, "onCreate: "+e.toString()); 
     } 
    } 
    private void setData(){ 
     MainList mainList = new MainList("all","khddai"); 
     MainList mainList1 = new MainList("sf","khddai"); 
     MainList mainList2 = new MainList("adfdli","khdfai"); 
     MainList mainList3 = new MainList("aldi","khdfai"); 

     arrayList.add(mainList); 
     arrayList.add(mainList1); 
     arrayList.add(mainList2); 
     arrayList.add(mainList3); 
    } 
} 

アンドロイドログ猫: 7月20日14:53:15.240 9861から9861/com.package.app I /タグ:ListActivity:のonCreate :java.lang.NullPointerException

+0

残りのスタックトレースをポストすると、私は推測し、listViewが見つからないと言うでしょう。あなたはandroid.R.id.listから探している可能性があります。一般的な間違いです。 –

+0

'inflater.inflate(R.layout.list、null);'あなたは 'row_layout'を膨らませ、そのオブジェクトを使ってビュー。 –

+1

と変更しようとしました。 'view == null){ view = inflater.inflate(R.layout.list、null);' –

答えて

0

In ListActivity private ArrayList<MainList> arrayList;オブジェクトを作成しませんでした。オブジェクトを使用して、その変数をsetData()メソッドで使用しています。

は、あなたがすべき、

private ArrayList<MainList> arrayList = new ArrayList<>(); 

または

SRBの禁止が言及としてこの

private void setData(){ 
     arrayList = new ArrayList<>(); 
     MainList mainList = new MainList("all","khddai"); 
     MainList mainList1 = new MainList("sf","khddai"); 
     MainList mainList2 = new MainList("adfdli","khdfai"); 
     MainList mainList3 = new MainList("aldi","khdfai"); 

     arrayList.add(mainList); 
     arrayList.add(mainList1); 
     arrayList.add(mainList2); 
     arrayList.add(mainList3); 
    } 

と別の問題のようにsetDataにリストに追加する前に、このようなクラス変数にオブジェクトを作成します子供を得る前にビューを作成する、レイアウトから取得した後にビューを取得するために逃したインフレータview = inflater.inflate(R.layout.list,null);

+0

あなたの言ったことが正しいかどうかはわかります –

+0

残念ながら私は理解しませんでした!もっと説明してください。 –

+0

疑問がある場合は私の回答を編集しました。 –

関連する問題