0

私はアンドロイドを扱っていListViewますが、膨らませると奇妙なエラーに直面しましたListItemgetViewにデータが既に表示されているのに、メソッドに自分のデータが表示されませんLogCat。何か案は ?

private ListViewAdapter m_adapter;
public ArrayList<String> cat = new ArrayList<String>();
private SharedPreferences preferences;
private SharedPreferences.Editor editor;
String title, character, thumbnail, totalPages;
int Code;
ViewHolder vh;
TextView titleView, charView, totalView;
ImageView thumbView, removeView;
Uri thumbUri;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(android.R.style.Theme_Black_NoTitleBar);
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.myputet);
    init_UI();
}

public void init_UI() {
    preferences = getApplicationContext().getSharedPreferences(
            Constants.SHARED_PRED, 0);
    editor = preferences.edit();

    title = preferences.getString("TITLE", "");
    character = preferences.getString("CHAR", "");
    thumbnail = preferences.getString("THUMB", "");
    thumbUri = Uri.parse(thumbnail);
    totalPages = preferences.getString("TOTAL", "");
    Code = preferences.getInt("CODE", 0);

    System.out.println("Getting Title " + title);
    System.out.println("Getting character " + character);
    System.out.println("Getting thumbnail " + thumbnail);
    System.out.println("Getting thumbUri " + thumbUri);
    System.out.println("Getting totalPages " + totalPages);

    Log.v("ArrayList", cat.toString());
    ListView lv = (ListView) findViewById(R.id.listview);

    m_adapter = new ListViewAdapter(this, R.layout.myputet_item, cat);
    lv.setAdapter(m_adapter);
}

private class ListViewAdapter extends ArrayAdapter<String> {
    private ArrayList<String> items;

    public ListViewAdapter(Context context, int textViewResourceId,
            ArrayList<String> items) {
        super(context, textViewResourceId, items);
        this.items = items;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.myputet_item, null);
        }

        Log.v("Title View", title);
        titleView = (TextView) v.findViewById(R.id.titleTxtView);
        charView = (TextView) v.findViewById(R.id.charTxtView);
        totalView = (TextView) v.findViewById(R.id.totalTxtView);
        thumbView = (ImageView) v.findViewById(R.id.charImageView);
        removeView = (ImageView) v.findViewById(R.id.removeListItem);
        if (titleView != null) {
            titleView.setText(title);
            Log.v("Update Title", title);
        }
        charView.setText(character);
        Log.v("Update character", character);
        totalView.setText(totalPages);
        Log.v("Update totalPages", totalPages);
        thumbView.setImageURI(thumbUri);

        return convertView;
    }
}

LogCat出力

10-31 23:52:34.438: V/Title View(4568): မိခ်ိဳေစ်းကအျပန္
10-31 23:52:34.438: V/Update Title(4568): မိခ်ိဳေစ်းကအျပန္
10-31 23:52:34.438: V/Update character(4568): ကိုေရႊထူး(ျပည္)
10-31 23:52:34.438: V/Update totalPages(4568): 3
4

1 に答える 1

2

で変更したビューを返す必要がありますgetView()

return v; // not convertView

別の注意として、ListView のすべての行は同じになります... titlecharacterなどは変更されないため、何度も表示されます。

最後に、Android の Romain Guyが、効率的なアダプタを使って高速化する方法について話しているのをご覧ください。

于 2012-10-31T17:32:23.880 に答える