2017-01-16 42 views
0

我正在測試一個簡單的網格適配器與自定義對象,該應用程序運行在設備上沒有問題,但保持空白,而不是使用指定的網格項充氣的活動。這是我的代碼。該活動是空白的自定義網格適配器代碼錯了嗎?

主要活動

package com.example.nobodyme.errorrepository; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.support.v7.app.ActionBarActivity; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.GridView; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import android.view.View; 
    import android.widget.AdapterView.OnItemClickListener; 

    import java.util.ArrayList; 

    public class MainActivity extends ActionBarActivity { 

    GridView gridView; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    ArrayList<GridItems> gridItems = new ArrayList<>(); 
    gridItems.add(new GridItems("Android", 2)); 
    gridItems.add(new GridItems("Java", 3)); 

    gridView = (GridView) findViewById(R.id.gridView1); 

    gridView.setAdapter(new GridViewAdapter(this, gridItems)); 



    } 

    } 

GridViewAdapter

package com.example.nobodyme.errorrepository; 

    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.TextView; 

    import java.util.List; 



    public class GridViewAdapter extends ArrayAdapter<GridItems> { 

     private Context context; 
     int b; 

     public GridViewAdapter(Context context, List<GridItems> gridItems) { 
      super(context, 0, gridItems); 
      b=gridItems.size(); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 

      View gridView = convertView; 

      if(gridView == null) 
      { 

       gridView = LayoutInflater.from(getContext()).inflate(
              R.layout.grid_view, parent, false); 

      } 

      GridItems currentgriditem = getItem(position); 

      TextView mMaintextView = (TextView) gridView.findViewById(R.id.grid_item_main); 
      mMaintextView.setText(currentgriditem.getTitle()); 


      TextView mUnansweredtextView = (TextView) gridView.findViewById(R.id.grid_item_unanswered); 
      mUnansweredtextView.setText(currentgriditem.getUnansweredNo()); 


      return gridView; 

     } 

     @Override 
     public int getCount() { 
      return b; 
     } 


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

    } 

GridItems

package com.example.nobodyme.errorrepository; 

/** 
* Created by nobodyme on 15/1/17. 
*/ 

public class GridItems { 

    /** Grid title*/ 
    private String mTitle; 

    /** NO of unanswered items in the gird **/ 
    private Integer mUnansweredNo; 

    public GridItems(String Title, Integer UnansweredNo) { 
     mTitle = Title; 
     mUnansweredNo = UnansweredNo; 
    } 



    public String getTitle() { 
     return mTitle; 
    } 


    public Integer getUnansweredNo() { 
     return mUnansweredNo; 
    } 


} 

我有EDI根據評論評估代碼,應用程序仍然崩潰。

回答

1

您需要在arrayAdapter定義gridItems列表和設置在構造 並覆蓋getCount將返回gridItems(adapterGridItems)大小

private List<GridItems> adapterGridItems; 

    public GridViewAdapter(Context context, List<GridItems> gridItems) { 
      super(context, 0, gridItems); 
      //set adapterGridItems 
      this.adapterGridItems=gridItems; 
    } 
    @Override 
    public int getCount() { 
     return adapterGridItems.size(); 
    } 

請檢查

mMaintextView.setText(currentgriditem.getUnansweredNo()); 

你逝去一個整數,所以mMainTextView.setText會找到一個資源與currentgriditem.getUnansweredNo()ID,我想你想設置currentgriditem.getUnansweredNo()作爲字符串,所以這將工作

mMaintextView.setText(currentgriditem.getUnansweredNo()+""); 

您確定這是mMaintextView.setText(currentgriditem.getUnansweredNo()+「」);

,而不是

mUnansweredtextView.setText(currentgriditem.getUnansweredNo()+""); 

+0

是的,我已經使這些更改實際上是idk爲什麼只能看到問題的未更改版本 – Nobody

+0

其實我做了所有更改用於字符串轉換的'+「」'。這就是訣竅。謝謝 – Nobody

3

您重寫getCount並在適配器中返回零。請勿覆蓋此項,或返回正確數量的項目。

+0

你可以telmme如何做到這一點?我根據其他答案做了,它不起作用,不覆蓋崩潰的應用程序。 – Nobody

2

請檢查下面的代碼:

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

而不是0返回時,你應該返回列表的大小。

+0

試圖返回說無法識別符號girdItems,如何解決? – Nobody

0

爲了告訴適配器有多少GridItems需要顯示,我們需要覆蓋getCount方法,如上面的@samsad所示。

編譯器抱怨它無法識別符號網格項的原因是因爲您尚未創建一個字段來存儲對適配器中的網格項的引用。

嘗試在適配器中爲GridItems的ArrayList創建一個字段以解決問題。

+0

'public GridViewAdapter(Context context,List gridItems){ super(context,0,gridItems); b = gridItems。尺寸(); }' – Nobody

+0

是的,我添加了對girditems的引用,並在getcount中返回b,但應用程序崩潰 – Nobody

相關問題