基本的なリストビューアプリケーションを作成しようとしています。デフォルトのシステムアレイアダプタで正常に動作しました。次に、カスタムアダプタを使用できるように変更しようとしました。残念ながら、私は問題に遭遇しました。
アプリケーションを実行すると、ランタイムエラーは発生しません。リストが表示されるはずの黒い画面が表示されるため、リストが表示されている可能性がありますが、何らかの理由でアダプターがデータを検出していません。
とにかく、以下は私のリストアクティビティです:
package com.example.waitronproto2;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class AppetizersActivity extends ListActivity{
//Instance Variables
//Array to hold menu appetizers - In future this will be pulled from web server
private List<MenuItem> appetizers;
private MenuItemArrayAdapter appetizersAdapter;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//Garbage collection
System.gc();
setContentView(R.layout.appetizers_list);
fillList();
//Create custom array adapter - links list with source of data, an array.
appetizersAdapter = new MenuItemArrayAdapter(this, appetizers);
//Set the newly created adapter as the lists adapter.
this.setListAdapter(appetizersAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
//Toast for testing
Toast.makeText(this.getApplicationContext(), l.getItemAtPosition(position) + " Clicked!", Toast.LENGTH_LONG).show();
//store clicked item in String variable
String choice = l.getItemAtPosition(position).toString();
//add to an array that is being passed from Activity to Activity
}
//fill the list with menu items
private void fillList(){
appetizers = new ArrayList<MenuItem>();
appetizers.add(new MenuItem("Appetizer 1", "Appetizer", 8.95));
appetizers.add(new MenuItem("Appetizer 2", "Appetizer", 9.95));
appetizers.add(new MenuItem("Appetizer 3", "Appetizer", 12.95));
appetizers.add(new MenuItem("Appetizer 4", "Appetizer", 4.95));
appetizers.add(new MenuItem("Appetizer 5", "Appetizer", 5.95));
appetizers.add(new MenuItem("Appetizer 6", "Appetizer", 7.95));
appetizers.add(new MenuItem("Appetizer 7", "Appetizer", 5.95));
appetizers.add(new MenuItem("Appetizer 8", "Appetizer", 12.95));
appetizers.add(new MenuItem("Appetizer 9", "Appetizer", 10.95));
}
}
これが私のアダプタクラスです:
package com.example.waitronproto2;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
//Default array adapter for menu items
public class MenuItemArrayAdapter extends ArrayAdapter<MenuItem> {
private List<MenuItem> menuItems;
//Constructor
public MenuItemArrayAdapter(Context context, List<MenuItem> menuItems) {
super(context, R.layout.menuitem_row);
this.menuItems = menuItems;
}
//get views
public View getView(final int position, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.menuitem_row, null);
}
//assign values to view
MenuItem item = this.menuItems.get(position);
TextView nameView = (TextView) v.findViewById(R.id.item_name);
TextView priceView = (TextView) v.findViewById(R.id.item_price);
nameView.setText(item.getName());
priceView.setText(String.valueOf(item.getPrice()));
return v;
}
}
私が間違っているかもしれないアイデアはありますか?
どうもありがとう!