我希望将 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);
}
该代码似乎工作正常,我认为它只是有点草率。如果有人能提出一个更清洁的解决方案,将不胜感激,如果没有,那么我会在可以的情况下将其添加为答案并接受它