2015-02-13 5 views
-1

Это то, что я пробовал, но мой ListView не заполняется. Я использую пользовательский адаптер, потому что я не хочу менять цвет фона элементов, которые имеют значение boolean = true. Я использую Android Studio. Надеюсь, кто-то может помочь. Я новичок в android.Я сделал свой собственный адаптер ListView, но данные не печатаются

public class ShoppingListActivity extends ActionBarActivity { 
     private TextView header; 
     private ListView listView; 
     private CustomArrayAdapter arrayAdapter; 
     private ShoppingList shoppingList; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_shopping_list); 
      header = (TextView)findViewById(R.id.textView2); 

      //get reference to ListView 
      listView = (ListView)findViewById(R.id.shoppingListItemsView); 
      shoppingList = (ShoppingList) getIntent().getSerializableExtra(Globals.CHOSENLISTKEY); 
      arrayAdapter = new CustomArrayAdapter(this, R.layout.custom_list_view, shoppingList.getItemList()); 
      listView.setAdapter(arrayAdapter); 


      header.setText(shoppingList.toString()); 

      Button btnShop = (Button) findViewById(R.id.btnShop); 
      btnShop.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(ShoppingListActivity.this, SelectStoreActivity.class); 
        startActivity(intent); 
       } 
      }); 
     } 

     public void setData() { 
      for(int i = 0; i < shoppingList.getItemList().size(); i++) { 
       arrayAdapter.add(shoppingList.getItemList().get(i)); 
      } 
     } 
    } 


    public class CustomArrayAdapter extends ArrayAdapter<Entry> { 

     private int resource; 
     private ArrayList<Entry> list; 

     public CustomArrayAdapter(Context context, int resource, ArrayList<Entry> list) { 
      super(context, resource); 
      this.resource = resource; 
      this.list = list; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parentGroup) { 
      View view = convertView; 
      Entry entry = list.get((position)); 
      if(view == null) { 
       LayoutInflater layoutInflater = ((Activity) getContext()).getLayoutInflater(); 
       view = layoutInflater.inflate(resource, parentGroup, false); 
      } 

      TextView textView = (TextView) view.findViewById(R.id.customName); 

       if(entry.getItem().isBought()) { 
        textView.setBackgroundColor(Color.BLUE); 
       } 

      return view; 
     } 
    } 
+0

попытка печати shoppingList.getItemList(); Я думаю, что он вернет пустое или пустое значение. –

+0

Вы когда-нибудь называли 'setData'? – njzk2

+0

Я напечатал его, и его не пусто - Революция – user2993005

ответ

1

Чтобы показать данные в ListView строках называть setText метод TextView который является возвращение из getView метода:

TextView textView = (TextView) view.findViewById(R.id.customName); 
// get Text from entry and pass it to setText method 
String strTextViewData=entry.getItem()...; 
textView.setText(strTextViewData); 
if(entry.getItem().isBought()) { 
textView.setBackgroundColor(Color.BLUE); 
} 
+0

Я получаю эту ошибку при добавлении кода java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.TextView.setText (java.lang.CharSequence) 'на ссылке нулевого объекта – user2993005

+0

@ user2993005: Используйте 'view = layoutInflater.inflate (R.layout.custom_list_view, parentGroup, false);' line вместо 'view = layoutInflater.inflate (resource, parentGroup, false); ' –

+0

Хорошо, что дает ту же ошибку, мой код в getView теперь выглядит следующим образом: http://puu.sh/fRQur/d2822ca6b0.png – user2993005

Смежные вопросы