【问题标题】:getView not rendering even though data shown in LogCat即使 LogCat 中显示数据,getView 也不会呈现
【发布时间】:2012-10-31 17:25:59
【问题描述】:

我正在处理 android ListView,当我对 ListItem 进行充气时遇到了奇怪的错误。我在getView 方法上看不到我的数据,即使数据已经显示在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

【问题讨论】:

标签: android arraylist android-listview logcat


【解决方案1】:

你需要返回你在getView()中修改的View:

return v; // not convertView

另一方面,ListView 中的每一行都是相同的...titlecharacter 等永远不会改变,因此它们会一遍又一遍地显示。

最后,请关注 Android 的 Romain Guy discuss efficient adapters 以帮助您加快速度。

【讨论】:

  • 我已经尝试过 return v;但它不起作用。有什么想法吗?
  • 尝试使用v = vi.inflate(R.layout.myputet_item, parent, false); 增加您的视图。
  • 可能是您的myputet.xml 布局,是屏幕上的ListView 吗?
猜你喜欢
  • 1970-01-01
  • 2019-05-30
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多