2

いくつかのチュートリアルに従いましたが、まだリスト ビューにデータを入力できません。私は何を間違っていますか?

これはレイアウト spaced_list.xml です

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mList"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</ListView>

これは spaced_list_item.xml です

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp" 
    android:background="#efefef">

<TextView
    android:id="@+id/leftItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:gravity="left"
    android:text="Left Text View" />

<TextView
    android:id="@+id/rightItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:gravity="right"
    android:text="Right Text View" />

</RelativeLayout>

そしてこれがクラスです

public class AllCategoriesActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.spaced_list);


    ListView lv = (ListView) findViewById(R.id.mList);
    TextView abHeader = (TextView) findViewById(R.id.header);
    abHeader.setText("Categories");

    CategoryDataSource cDataSource = new CategoryDataSource(this);
    ArrayList<Category> allCategories = cDataSource.getAllCategories();
    CategoriesAdapter cAdapter = new CategoriesAdapter(this, allCategories);
    lv.setAdapter(cAdapter);

}

public class CategoriesAdapter extends ArrayAdapter<Category>{
    private Context context;
    private ArrayList<Category> categories;

    public CategoriesAdapter(Context context, ArrayList<Category> categories){
        super(context, 0);
        this.context = context;
        this.categories = categories;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.spaced_list_item, parent, false);
        }

        Category c = categories.get(position);  

        TextView tvLeft = (TextView) convertView.findViewById(R.id.leftItem);
        tvLeft.setText(c.getTitle());

        return convertView;
    }
}
}

そして、私は値を取得していることを確認しましたcDataSource.getAllCategories();

4

2 に答える 2

1

これを変える:

  public CategoriesAdapter(Context context, ArrayList<Category> categories){
        super(context, 0); // <- Wrong constructor
        this.context = context;
        this.categories = categories;
    }

これに:

  public CategoriesAdapter(Context context, ArrayList<Category> categories){
        super(context, 0, categories);
        this.context = context;
        this.categories = categories;
    }

現在、スーパー クラスのこのコンストラクタを呼び出しています。

  public ArrayAdapter(Context context, int textViewResourceId) {
        init(context, textViewResourceId, 0, new ArrayList<T>());
    }

これにより、最終的に新しいものが作成され、ArrayList渡したデータが無視されます。

于 2013-05-26T00:30:37.913 に答える
0

問題は、アダプターのコンストラクターにあります。ArrayList<Category>電話するときに提供する必要がありますsuper()。コードは次のとおりです。

public CategoriesAdapter(Context context, ArrayList<Category> categories){
    super(context, 0, categories); //Providing objects to represent in the ListView
    this.context = context;
    this.categories = categories;
}

これは、このArrayAdapter コンストラクターのリファレンスを含むドキュメントです。

于 2013-05-26T00:36:30.440 に答える