0

ダイアログをカスタマイズしようとしています。DB から文字列を取得し、リストに入力する必要があります。私のダイアログ:

public class CountriesDialog extends AlertDialog {

private Context context;
private Vector<String> countries;
private ListView listView;
private CountriesAdapter adapter;

public CountriesDialog(Context context, Vector<String> countries) {
    super(context);
    this.context = context;
    this.countries = countries;

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    listView = new ListView(context);
    listView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
    listView.setId(android.R.id.list);

    Log.e("WORKS", " "+(listView == null) + " asas");
    adapter = new CountriesAdapter(context, countries);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(adapter);

    setInverseBackgroundForced(true);
    setView(listView);
    setTitle("Select country");

    super.onCreate(savedInstanceState);
}

}

私のアダプター(各行をカスタマイズするため):

public class CountriesAdapter extends ArrayAdapter<String> implements OnItemClickListener {

private Vector<String> countries;
private Context context;

public CountriesAdapter(Context context, Vector<String> countries) {
    super(context, R.layout.countries_row);
    this.context = context;
    this.countries = countries;
}

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

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.countries_row, parent, false);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.countries_list_single_image);
    TextView textView = (TextView) rowView.findViewById(R.id.countries_list_single_text);
    textView.setText(countries.get(position));

    DatabaseManager db = new DatabaseManager(context);
    db.connectForReading();
    String recource = db.getFLagName(countries.get(position));
    db.disconnect();

    int resId = context.getResources().getIdentifier(recource, "drawable", "com.emaborsa");
    imageView.setImageDrawable(context.getResources().getDrawable(resId));
    Log.e("WORKS", recource );
    return rowView;
}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub

}

}

アプリケーションは例外をスローしません。ダイアログが表示されます...しかし空です。タイトルのみが表示され、行エントリは表示されません。コードが実行されるかどうかを確認するために、Log.e を使用していくつか試してみました。アダプターの getView は呼び出されず、Dialog の onCreate は呼び出されます。問題はダイアログの次の 2 行にあると思いますが、修正方法がわかりません。

    listView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
    listView.setId(android.R.id.list);
4

2 に答える 2

2

アダプタは、エントリの数について何も認識していないようです。カスタムlistadapterのgetCount()関数をオーバーライドしてみてください。または、スーパークラスコンストラクターsuper(context、R.layout.countries_row、countries);を使用します。

于 2012-07-13T20:01:29.870 に答える
0

試行錯誤した後、私はそれを整理し、知識を共有したいと思いました. ダイアログから次の行を削除しました。

 listView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
 listView.setOnItemClickListener(adapter);
 setInverseBackgroundForced(true);

そしてアダプターで、スーパーコンストラクターを変更し、渡されたレイアウトとアイテムを変更しました:

super(context, R.layout.countries, countries);

アダプターでは、各行にリスナーを追加してイベントを処理する必要もありました....

于 2012-07-14T08:09:32.133 に答える