MergeAdapter をプロジェクトに統合しようとしていますが、ユーザーがクリックしたセクションを取得しようとして問題が発生しています。ユーザーが任意のセクションのアイテムをクリックすると、セクション番号が返されるように設定したいので、ユーザーがどのセクションにいるかがわかります。私が取り組んでいるアプリではこれが必要です。
以下のコードは、各セクションにいくつかのデータを含む 3 つのセクションを設定します。
public class SectionTesting extends Activity
{
ListView listView;
private MergeAdapter mergeAdapter = null;
private static final String[] items =
{ "One", "Two", "Three" };
Context context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mergelayout);
context = this;
listView = (ListView) findViewById(R.id.mergeListView);
mergeAdapter = new MergeAdapter();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, new ArrayList<String>(
Arrays.asList(items)));
TextView sectionHeader = new TextView(this);
sectionHeader.setText("Section One");
mergeAdapter.addView(sectionHeader);
mergeAdapter.addAdapter(adapter);
TextView sectionHeaderTwo = new TextView(this);
sectionHeaderTwo.setText("Section Two");
mergeAdapter.addView(sectionHeaderTwo);
mergeAdapter.addAdapter(adapter);
TextView sectionHeaderThree = new TextView(this);
sectionHeaderThree.setText("Section Three");
mergeAdapter.addView(sectionHeaderThree);
mergeAdapter.addAdapter(adapter);
listView.setAdapter(mergeAdapter);
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position,
long arg3)
{
Toast.makeText(
context,
"You clicked Section "
+ mergeAdapter.getSectionForPosition(position),
Toast.LENGTH_SHORT).show();
}
});
}
}
getSectionForPosition メソッドが必要な値を返すことを望んでいましたが、毎回 0 が返されます。メソッド getSections().length を呼び出して、正しいセクション数が返されていることを確認しようとしましたが、毎回 0 として返されます。
どんな助けでも大歓迎です!!
編集
私はこの厄介な解決策を思い付くことができました。MergeAdapter クラスの addView メソッドの下に、次のコード行を追加しました。
view.setId(1000);
次に、このメソッドをここに追加しました
public int getSectionNumber(int position)
{
int section = 0;
for (ListAdapter piece : getPieces())
{
int size = piece.getCount();
if (position < size)
{
return section-=1;
}
position -= size;
if(size == 1)
{
if(piece.getItem(0) instanceof TextView)
{
TextView tv = (TextView) piece.getItem(0);
if(tv.getId() == 1000)
{
section++;
}
}
}
}
return (-1);
}
コードはうまく動作しているようですが、少しずさんだと思います。誰かが非常に高く評価されるよりクリーンなソリューションを思いつくことができれば、そうでない場合は、できるときにこれを答えとして追加し、それを受け入れます