我正在使用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",""), //
};
答案 0 :(得分:0)
这是我的错误,我在那里做+1,所以它现在几乎解决了。