0

私は単純な「クエスト」アプリをやっています。各クエストは、やるべきことのチェックリストで構成されています。各クエストのタイトルを示すボタンを使用して、利用可能なクエストのリストを表示したいと考えています。

私は各クエストとその仕様をデータベースに持っています。このようないくつかのチュートリアルに従って、ArrayAdapter を使用してリストを表示しますが、レイアウトに「textview resource id」が必要です。テキストビューを使用したことがないため、各クエストのタイトル (データベースから取得したもの) をレイアウトに渡してボタンに配置する方法がわかりません。

わかりやすくするために、DB からデータを取得するアクティビティのコードを次に示します。

public class InProgress extends ListActivity {

    private questspecdao datasource;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        datasource = new questspecdao(this);
        datasource.open();

        List<questspec> values = datasource.getAllQuests();

        ArrayAdapter<questspec> adapter = new ArrayAdapter<questspec>(this,
                R.layout.questrow, values);
        setListAdapter(adapter);
    }

    @Override
    protected void onResume() {
        datasource.open();
        super.onResume();
    }

    @Override
    protected void onPause() {
        datasource.close();
        super.onPause();
    }

}

前もって感謝します!

4

1 に答える 1

0

ArrayAdapter の適応が間違っています。

Android の公式ドキュメント、ArrayAdapter によると、「デフォルトでは、このクラスは、提供されたリソース ID が単一の TextView を参照することを想定しています」

つまり、TextView のみをサポートするため、次のように実装する必要があります。

    ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array /** Your data String[] goes here. */);

    /** Sets adapter to your declared ListView. */
    youtListView.setAdapter(arrayAdapter);

カスタマイズされたリスト項目が必要な場合は、独自のアダプターを作成する必要があります。

public class MyArrayAdapter extends ArrayAdapter<String> {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            /** Inflate a xml layout to the View. */
        View itemView = inflater.inflate(R.layout.rowlayout, parent, false);

            /**Declare all of your items at the previous defined rowlayout xml file . */
        TextView textView = (TextView) itemView .findViewById(R.id.textView);
        ImageView imageView = (ImageView) itemView .findViewById(R.id.icon);

            /** Set some values to the declared item views. */
        textView.setText(values[position]);
        if (values[position].contains("XXXXXXX")) {
            imageView.setImageResource(R.drawable.x);
        } else {
            imageView.setImageResource(R.drawable.y);
        }

        return itemView;
    }
} 

それがあなたを助けたかどうか教えてください:)

于 2012-07-10T00:22:47.533 に答える