gpt4 book ai didi

android - 将 onClickListener 设置为由自定义适配器填充的 LinearLayout

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:52 26 4
gpt4 key购买 nike

我正在尝试在我的 ScrollView 中显示两个列表。我找到了以下解决方案:Using a ListAdapter to fill a LinearLayout inside a ScrollView layout (使用自定义适配器填充 LinearLayout)。

此解决方案工作正常,但我不知道如何处理列表项上的点击事件。如果我使用 ListView(带有位置参数的 onItemClick 方法)会很简单,但 LinearLayout 不支持相同的功能。

我的布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:scrollbars="none"
android:background="@color/background_gray_light">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
// here should be view with infobox, not implemented yet //
<LinearLayout
android:id="@+id/story_list_inbox"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/archive"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="@color/actionbar_bg"
android:text="@string/archive"
android:textSize="16dp"
android:textColor="@color/text_gray"
android:gravity="center_horizontal" />
<LinearLayout
android:id="@+id/story_list_archive"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

填充列表:

public class StoryListFragment extends Fragment {   
public StoryListFragment() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_story_list, container,
false);

TextView archiveText = (TextView) view.findViewById(R.id.archive);
archiveText.setText(archiveText.getText().toString().toUpperCase());

final List<Story> storyList = new ArrayList<Story>();
// filling the list ....

StoryListAdapter adapter = new StoryListAdapter(getActivity(), R.layout.story_list_item, storyList);
LinearLayout inbox = (LinearLayout) view.findViewById(R.id.story_list_inbox);

final int inboxCount = adapter.getCount();

for (int i = 0; i < inboxCount; i++) {
View item = adapter.getView(i, null, null);
inbox.addView(item);
}

/* archive */
// filling the list ....

LinearLayout archive = (LinearLayout) view.findViewById(R.id.story_list_archive);

final int archiveCount = adapter.getCount();

for (int i = 0; i < archiveCount; i++) {
View item = adapter.getView(i, null, null);
archive.addView(item);
}

return view;
}
}

问题:

我应该如何使 LinearLayout 列表项可点击以便能够获取被点击项的索引?

我什至想达到的目标:

也许我什至没有使用正确的解决方案,我在这里试图实现的是创建类似于消息收件箱的东西,它由两个列表组成 - 一个用于最新消息,第二个用于存档消息。我还想在列表顶部显示一些内容,所以我将它们全部放在一个 ScrollView 中。它应该看起来像这样:

enter image description here

解决方案:

for (int i = 0; i < inboxCount; i++) {
final int index = i;

View item = adapter.getView(i, null, null);
item.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("Clicked " + index);
startActivity(new Intent(v.getContext(), StoryIntroActivity.class));
}
});
inbox.addView(item);
}

最佳答案

我应该如何使 LinearLayout 列表项可点击以便能够获取被点击项的索引?

您可以执行以下操作,以便将点击项目的索引传递给您可能想要响应点击的另一个 Activity 。在您的 onCreate 中执行如下操作:

getListView().setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View v, int position, long id)
{
//position is the item number in your listview
Intent intent = new Intent(getApplicationContext(),xyz.class);
intent.putExtra("itemNo.", position);
startActivity(intent);
}
});

请注意,如果您的类扩展了 ListActivity,那么只有您可以像上面那样直接使用 this.getListView()。如果您扩展 Activity 然后引用 to this answer .

答案建议:

无论何时使用 Activity,您都将 your_layout.xml 设置为 Activity 的 ContentView。所以 ListView 应该在 your_layout.xml 中。

ListView 应该有一个在 xml 文件中定义的 id 属性,比如:(android:id="@+id/list")。您可以通过这种方式获得 ListView 对象:

setContentView(R.layout.your_layout);
ListView list = (ListView)findViewById(R.id.list);
list.addFooterView(view);

关于android - 将 onClickListener 设置为由自定义适配器填充的 LinearLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com