Android Section ListView Japaness字符问题

时间:2012-12-26 19:02:40

标签: android listview android-listview

我正在使用http://code.google.com/p/android-section-list/。当我使用英文字母时,它的效果非常好。但是当我尝试使用日文文本时。它不能正常工作。

问题在于日语文本,当我稍微滚动一下时,它会将粘性标题更改为下一节文本。

这是我的sectionlist适配器

public class GreetingsSectionListAdapter extends BaseAdapter implements ListAdapter, ItemClickListener {
private final DataSetObserver dataSetObserver = new DataSetObserver() {
    @Override
    public void onChanged() {
        super.onChanged();
        updateSessionCache();
    }

    @Override
    public void onInvalidated() {
        super.onInvalidated();
        updateSessionCache();
    };
};

private final ListAdapter linkedAdapter;
private final Map<Integer, String> sectionPositions = new LinkedHashMap<Integer, String>();
private final Map<Integer, String> sectionPositions1 = new LinkedHashMap<Integer, String>();
private final Map<Integer, String> imageSection = new LinkedHashMap<Integer, String>();
private final Map<Integer, Integer> itemPositions = new LinkedHashMap<Integer, Integer>();
private final Map<View, String> currentViewSections = new HashMap<View, String>();
private int viewTypeCount;
protected final LayoutInflater inflater;

private View transparentSectionView;

private OnItemClickListener linkedListener;
Context c;

public GreetingsSectionListAdapter(final LayoutInflater inflater,
        final ListAdapter linkedAdapter, Context c) {
    this.linkedAdapter = linkedAdapter;
    this.inflater = inflater;
    this.c = c;
    linkedAdapter.registerDataSetObserver(dataSetObserver);
    updateSessionCache();
}

private boolean isTheSame(final String previousSection,
        final String newSection) {
    if (previousSection == null) {
        return newSection == null;
    } else {
        return previousSection.equals(newSection);
    }
}

private synchronized void updateSessionCache() {
    int currentPosition = 0;
    sectionPositions.clear();
    itemPositions.clear();
    viewTypeCount = linkedAdapter.getViewTypeCount() + 1;
    String currentSection = null;
    final int count = linkedAdapter.getCount();
    for (int i = 0; i < count; i++) {
        final GreetingsSectionListItem item = (GreetingsSectionListItem) linkedAdapter
                .getItem(i);
        if (!isTheSame(currentSection, item.title)) {
            sectionPositions.put(currentPosition, item.title);
            sectionPositions1.put(currentPosition, item.profile);
            imageSection.put(currentPosition, item.imagename);
            currentSection = item.title;
            currentPosition++;
        }
        itemPositions.put(currentPosition, i);
        currentPosition++;
    }
}

@Override
public synchronized int getCount() {
    return sectionPositions.size() + itemPositions.size();
}

@Override
public synchronized Object getItem(final int position) {
    if (isSection(position)) {
        return sectionPositions.get(position);
    } else {
        final int linkedItemPosition = getLinkedPosition(position);
        return linkedAdapter.getItem(linkedItemPosition);
    }
}

public synchronized boolean isSection(final int position) {
    return sectionPositions.containsKey(position);
}

public synchronized String getSectionName(final int position) {
    if (isSection(position)) {
        return sectionPositions.get(position);
    } else {
        return null;
    }
}

@Override
public long getItemId(final int position) {
    if (isSection(position)) {
        return sectionPositions.get(position).hashCode();
    } else {
        return linkedAdapter.getItemId(getLinkedPosition(position));
    }
}

protected Integer getLinkedPosition(final int position) {
    return itemPositions.get(position);
}

@Override
public int getItemViewType(final int position) {
    if (isSection(position)) {
        return viewTypeCount - 1;
    }
    return linkedAdapter.getItemViewType(getLinkedPosition(position));
}

private View getSectionView(final View convertView, final String title,
        final String profile, final String imagename) {
    View theView = convertView;
    if (theView == null) {
        theView = createNewSectionView();
    }

    setSectionText(title, profile, imagename, theView);
    replaceSectionViewsInMaps(title, theView);
    return theView;
}

//
protected void setSectionText(final String title, final String profile,
        final String imagename, final View sectionView) {

    final TextView textView = (TextView) sectionView
            .findViewById(R.id.greetingTitle);
    textView.setText(title);

    // //Example of setting any other's value
    final TextView textView1 = (TextView) sectionView
            .findViewById(R.id.txtProfile);
    textView1.setText(profile);

    final ImageView greetingImage = (ImageView) sectionView
            .findViewById(R.id.imageView1);

    if (!imagename.equals("")) {
        File filesDir = c.getFilesDir();
        File imageFile = new File(filesDir, imagename);
        Resources res = c.getResources();
        Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getPath());
        BitmapDrawable bd = new BitmapDrawable(res, bitmap);
        greetingImage.setImageDrawable(bd);
    }

}

protected synchronized void replaceSectionViewsInMaps(final String section,
        final View theView) {
    if (currentViewSections.containsKey(theView)) {
        currentViewSections.remove(theView);
    }
    currentViewSections.put(theView, section);
}

protected View createNewSectionView() {
    return inflater.inflate(R.layout.greetings_section_view, null);
}

@Override
public View getView(final int position, final View convertView,
        final ViewGroup parent) {
    if (isSection(position)) {
        return getSectionView(convertView, sectionPositions.get(position),
                sectionPositions1.get(position), imageSection.get(position));
    }
    return linkedAdapter.getView(getLinkedPosition(position), convertView,
            parent);
}

@Override
public int getViewTypeCount() {
    return viewTypeCount;
}


@Override
public boolean isEnabled(final int position) {
    if (isSection(position)) {
        return true;
    }
    return linkedAdapter.isEnabled(getLinkedPosition(position));
}

//
public void makeSectionInvisibleIfFirstInList(final int firstVisibleItem) {
    final String section = getSectionName(firstVisibleItem);
    // only make invisible the first section with that name in case there
    // are more with the same name
    boolean alreadySetFirstSectionIvisible = false;

    String tmp1 = "", tmp2 = "", tmpImageName = "";
    for (final Entry<Integer, String> entry1 : sectionPositions1.entrySet()) {
        if (entry1.getKey() > firstVisibleItem + 1) {
            break;
        }
        tmp1 = entry1.getValue();
    }
    for (final Entry<Integer, String> entry : sectionPositions.entrySet()) {
        if (entry.getKey() > firstVisibleItem + 1) {
            break;
        }
        tmp2 = entry.getValue();
    }

    for (final Entry<Integer, String> entry2 : imageSection.entrySet()) {
        if (entry2.getKey() > firstVisibleItem + 1) {
            break;
        }
        tmpImageName = entry2.getValue();
    }
    setSectionText(tmp2, tmp1, tmpImageName, getTransparentSectionView());
}

public synchronized View getTransparentSectionView() {
    if (transparentSectionView == null) {
        transparentSectionView = createNewSectionView();
    }
    return transparentSectionView;
}

protected void sectionClicked(final String section) {
    // do nothing
}

@Override
public void onItemClick(final AdapterView<?> parent, final View view,
        final int position, final long id) {
    if (isSection(position)) {
        sectionClicked(getSectionName(position));
    } else if (linkedListener != null) {
        linkedListener.onItemClick(parent, view,
                getLinkedPosition(position), id);
    }
}

public void setOnItemClickListener(final OnItemClickListener linkedListener) {
    this.linkedListener = linkedListener;
}

}

这是我的活动代码:

GreetingsSectionListItem[] greetingArray = { // Comment to prevent re-format
new GreetingsSectionListItem("Test 1 - A", "D","te",""), //
        new GreetingsSectionListItem("Test 2 - D", "D","te",""), //
        new GreetingsSectionListItem("Test 3 - D", "D","te",""), //
        new GreetingsSectionListItem("Test 4 - D", "D","te",""), //
        new GreetingsSectionListItem("Test 5 - D", "D","te",""), //
        new GreetingsSectionListItem("Test 6 - B", "B","te",""), //
        new GreetingsSectionListItem("Test 7 - B", "B","te",""), //
        new GreetingsSectionListItem("Test 8 - B", "B","te",""), //
        new GreetingsSectionListItem("Test 9 - Long", "Long section","te1",""), //
        new GreetingsSectionListItem("Test 10 - Long", "Long section","te1",""), //
        new GreetingsSectionListItem("Test 11 - Long", "Long section","te1",""), //
        new GreetingsSectionListItem("Test 12 - Long", "Long section","te1",""), //
        new GreetingsSectionListItem("Test 13 - Long", "Long section","te1",""), //
        new GreetingsSectionListItem("Test 14 - A again", "A","te2",""), //
        new GreetingsSectionListItem("Test 15 - A again", "A","te2",""), //
        new GreetingsSectionListItem("Test 16 - A again", "A","te2",""), //
        new GreetingsSectionListItem("Test 17 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 18 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 19 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 20 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 21 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 22 - B again", "B","te3",""), //
        new GreetingsSectionListItem("Test 23 - C", "C","te4",""), //
        new GreetingsSectionListItem("Test 24 - C", "C","te4",""), //
        new GreetingsSectionListItem("Test 25 - C", "C","te4",""), //
        new GreetingsSectionListItem("Test 26 - C", "C","te4",""), //
};


private StandardArrayAdapter arrayAdapter;

private GreetingsSectionListAdapter sectionAdapter;

private GreetingsSectionListView listView;

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.greetings_main);
    arrayAdapter = new StandardArrayAdapter(this, R.id.txt_sub_belong_to,
            greetingArray);

    sectionAdapter = new GreetingsSectionListAdapter(getLayoutInflater(),
            arrayAdapter,getApplicationContext());


    listView = (GreetingsSectionListView) findViewById(getResources().getIdentifier(
            "greetings_section_list_view", "id",
            this.getClass().getPackage().getName()));
    listView.setAdapter(sectionAdapter);
}

当我尝试将greetingArray更改为以下

时出现问题
GreetingsSectionListItem[] greetingArray = { // Comment to prevent re-format
        new GreetingsSectionListItem("挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。", "第1回 ○○学会総会の開催にあたって","te",""), //

                new GreetingsSectionListItem("挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。", "第1回 ○○学会総会の開催に寄せて","te1",""), //

                new GreetingsSectionListItem("挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。挨拶文が入ります。", "第1回 ○○学会総会の開催について","te2",""), //



        };

1 个答案:

答案 0 :(得分:0)

这是我的错误,我在那里做+1,所以它现在几乎解决了。