单击列表项,详细信息 activity 从列表视图浏览下一个和上一个列表项 activity
List item click, on detail activity navigate through next and previous list items from list view activity
我有 2 个活动,第一个包含列表视图,当用户单击该列表视图的列表项时,将启动详细视图 activity(第二个 activity)。
现在在第 2 个 activity,我有 2 个按钮,NEXT 按钮和 PREVIOUS 按钮,所以当用户点击NEXT 按钮,必须显示第一个 activity 中的下一个列表项。单击上一个按钮时,必须显示上一个列表项。
我在 1st activity 上扩展了 ArrayAdapter 以显示自定义列表项。在适配器上,有 2 个项目,即 2 个文本视图。
并且当用户点击并启动第 2 个 activity 时,将详细显示这 2 个 textview 的详细信息。并通过项目导航,返回到第一个 activity,然后每个项目再次启动第二个 activity,这对用户来说是忙碌的场景,所以我想详细导航项目查看 activity 本身。 那我该怎么办?
到目前为止我所做的是,我扩展了 ArrayAdapter,所以我从 getView() 方法中获取了位置值,然后在第 2 activity 我所做的是,
next = (ImageView) findViewById(R.id.next);
previous = (ImageView) findViewById(R.id.previous);
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
position++;
Log.e("position", String.valueOf(position));
}
});
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
position--;
Log.e("position", String.valueOf(position));
}
});
但是我不知道下一步该怎么做?
The position value is taken from 1st activity, with
intent.putExtra("position", position) and fetched on 2nd activity
using intent.getStringExtra("position").
我什至无法理解 this and that ,这只是理论上的。提前致谢。
EDIT-1:
我在第一个 activity 中有 custom ArrayAdapter,在 onclickListener 上,我已经申请了,
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(fActivity.this, sActivity.class);
intent.putExtra("txt1", "name");
intent.putExtra("txt2", "address");
intent.putExtra("position", position);
startActivity(intent);
}
});
这个位置是从
中检索的
public View getView(final int position, View convertView, ViewGroup parent) {
....
}
这个方法,在
class homeAdapter extends ArrayAdapter<list>
正如我之前在同一个面板上所写的那样。现在在 2nd activity 我必须在 2nd activity 使用下一个和上一个按钮获得 txt1
和 txt2
。
为此,您必须将 Array/List 保持为全局,以便 activity 都可以访问它。您也可以通过捆绑将整个 array/list 传递给下一个 activity 来做到这一点。
您必须执行以下操作:
- 将点击的位置和整个array/list打包发送到第二个activity。
- 从 bundle 中获取当前位置和 array/list 并显示当前位置的详细信息。
- 点击Next按钮增加位置,从list.array获取该位置的item并显示该位置的详细信息。
- 点击Previous按钮减少位置,从list.array获取该位置的项目并显示该位置的详细信息。
如果您粘贴了用于填充 ListView 的代码,那将非常有帮助。您使用哪种对象来创建列表? none less,这里是一些代码和方法。我在这里假设了一些事情,如果它们与您的代码不匹配,请评论答案。
创建一个 ArrayList,现在这可以像字符串 ArrayList<String>
或您想要的其他一些对象一样简单,例如 ArrayList<Items>
// 样本 Array<Items> itemsList = new ArrayList<Items>();
现在在列表视图的 itemClickListener 中,使用 Intents 将位置和整个数组列表传递给第二个 activity。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Items item = (Items) parent.getItemAtPosition(position);
Intent startDetailActivity = new Intent(Activity1.this, Activity2.class);
startDetailActivity.putExtra("position", position);
startDetailActivity.putExtra("itemList", itemList);
startActivity(startDetailActivity);
}
});
在你的activity2中,解析意图数据:
Intent i = this.getIntent();
int clickedPosition = i.getIntExtra(position, 0);
ArrayList<Items> itemsList = i.getSerializableExtra("itemList");
通过在 itemsList 中的位置获取对象来设置文本视图的数据:
textView1.setText(itemsList.get(clickedPosition).getSomeText());
textView2.setText(itemsList.get(clickedPosition).getSomeOtherText());
最后,当您单击 activity 2 上的下一个和上一个按钮时,然后增大或减小 clickedPosition 变量的大小,使其指向列表中的正确对象。只要确保您从数组列表中请求的索引是有效的,否则您将得到一个索引越界异常。这可以通过在请求该索引处的对象之前检查数组列表的大小来完成。
现在,这个答案假设了很多事情,比如你有一些对象的数组列表。这些对象中的变量至少有 getter 个方法,并且这些变量所在的 class 实现了一个 Serializable 接口。
如果您在执行此代码时遇到任何问题,请将其放在评论中。我很乐意尽我所能提供帮助。
编辑-1:
现在,我猜您已经能够解决 sActivity 中的意图,但是您在 sActivity 上显示来自位置和列表的数据时遇到了问题。所以,首先要确保你已经通过了点击位置以及意图中的整个列表。在 sActivity 中解决它们。现在,要在列表中的 sActivity 中显示数据,请编写以下代码行(在解析 sActivity 上的意图之后)。
yourTextView.setText(yourList.get(clickedPosition).getSomething());
yourTextView2.setText(yourList.get(clickedPosition).getSomeOtherThing());
不要被 getSomething() 搞糊涂了,它只是一个例子。您应该在此处获取要显示的数据。我还没有看到你正在制作的列表,所以我已经放了这段代码。现在,处理下一个和上一个按钮的点击。只需在下次点击时添加到点击位置变量,如:
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickedPosition++;
yourTextView.setText(yourList.get(clickedPosition).getSomething());
yourTextView2.setText(yourList.get(clickedPosition).getSomeOtherThing());
}
});
在上一个按钮 onClick 上,只需减少 clickedPosition 变量,如:
clickedPosition--;
//set text views here then
我的朋友,这应该做到。
如果您有静态列表并且不想动态更改列表数据,最简单的方法是将列表数据存储在 strings.xml
文件中,例如
<string-array name="textview1_items>
<item>head1</item>
<item>head2</item>
<item>head3</item>
.
.
.
</string-array>
同样适用于 textview 2 项。
然后在您的列表适配器和第二个 activity.
中从这些字符串数组中检索列表项
要从 java 访问这些数组,您需要执行以下操作:
String[] headers = context.getResources.getStringArray(R.array.textview1_items);
//在适配器中使用上下文,在第二个中使用此 activity
现在,当用户单击列表项时,只需将所选项目的位置传递给第二个 activity 并从您的字符串数组中检索该索引的信息。
希望对您有所帮助!
如有疑问请追问!
您只需要做,
第二个 activity,
str1 = fActivity.listAdapter.getItem(position).data1;
str2 = fActivity.listAdapter.getItem(position).data2;
并且在第一个 activity,
public static ArrayAdapter<List> listAdapter;
好了,你可以得到答案了。
干杯!
我有 2 个活动,第一个包含列表视图,当用户单击该列表视图的列表项时,将启动详细视图 activity(第二个 activity)。
现在在第 2 个 activity,我有 2 个按钮,NEXT 按钮和 PREVIOUS 按钮,所以当用户点击NEXT 按钮,必须显示第一个 activity 中的下一个列表项。单击上一个按钮时,必须显示上一个列表项。
我在 1st activity 上扩展了 ArrayAdapter 以显示自定义列表项。在适配器上,有 2 个项目,即 2 个文本视图。
并且当用户点击并启动第 2 个 activity 时,将详细显示这 2 个 textview 的详细信息。并通过项目导航,返回到第一个 activity,然后每个项目再次启动第二个 activity,这对用户来说是忙碌的场景,所以我想详细导航项目查看 activity 本身。 那我该怎么办?
到目前为止我所做的是,我扩展了 ArrayAdapter,所以我从 getView() 方法中获取了位置值,然后在第 2 activity 我所做的是,
next = (ImageView) findViewById(R.id.next);
previous = (ImageView) findViewById(R.id.previous);
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
position++;
Log.e("position", String.valueOf(position));
}
});
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
position--;
Log.e("position", String.valueOf(position));
}
});
但是我不知道下一步该怎么做?
The position value is taken from 1st activity, with intent.putExtra("position", position) and fetched on 2nd activity using intent.getStringExtra("position").
我什至无法理解 this and that ,这只是理论上的。提前致谢。
EDIT-1:
我在第一个 activity 中有 custom ArrayAdapter,在 onclickListener 上,我已经申请了,
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(fActivity.this, sActivity.class);
intent.putExtra("txt1", "name");
intent.putExtra("txt2", "address");
intent.putExtra("position", position);
startActivity(intent);
}
});
这个位置是从
中检索的public View getView(final int position, View convertView, ViewGroup parent) {
....
}
这个方法,在
class homeAdapter extends ArrayAdapter<list>
正如我之前在同一个面板上所写的那样。现在在 2nd activity 我必须在 2nd activity 使用下一个和上一个按钮获得 txt1
和 txt2
。
为此,您必须将 Array/List 保持为全局,以便 activity 都可以访问它。您也可以通过捆绑将整个 array/list 传递给下一个 activity 来做到这一点。
您必须执行以下操作:
- 将点击的位置和整个array/list打包发送到第二个activity。
- 从 bundle 中获取当前位置和 array/list 并显示当前位置的详细信息。
- 点击Next按钮增加位置,从list.array获取该位置的item并显示该位置的详细信息。
- 点击Previous按钮减少位置,从list.array获取该位置的项目并显示该位置的详细信息。
如果您粘贴了用于填充 ListView 的代码,那将非常有帮助。您使用哪种对象来创建列表? none less,这里是一些代码和方法。我在这里假设了一些事情,如果它们与您的代码不匹配,请评论答案。
创建一个 ArrayList,现在这可以像字符串
ArrayList<String>
或您想要的其他一些对象一样简单,例如ArrayList<Items>
// 样本Array<Items> itemsList = new ArrayList<Items>();
现在在列表视图的 itemClickListener 中,使用 Intents 将位置和整个数组列表传递给第二个 activity。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Items item = (Items) parent.getItemAtPosition(position); Intent startDetailActivity = new Intent(Activity1.this, Activity2.class); startDetailActivity.putExtra("position", position); startDetailActivity.putExtra("itemList", itemList); startActivity(startDetailActivity); }
});
在你的activity2中,解析意图数据:
Intent i = this.getIntent();
int clickedPosition = i.getIntExtra(position, 0);
ArrayList<Items> itemsList = i.getSerializableExtra("itemList");
通过在 itemsList 中的位置获取对象来设置文本视图的数据:
textView1.setText(itemsList.get(clickedPosition).getSomeText());
textView2.setText(itemsList.get(clickedPosition).getSomeOtherText());
最后,当您单击 activity 2 上的下一个和上一个按钮时,然后增大或减小 clickedPosition 变量的大小,使其指向列表中的正确对象。只要确保您从数组列表中请求的索引是有效的,否则您将得到一个索引越界异常。这可以通过在请求该索引处的对象之前检查数组列表的大小来完成。
现在,这个答案假设了很多事情,比如你有一些对象的数组列表。这些对象中的变量至少有 getter 个方法,并且这些变量所在的 class 实现了一个 Serializable 接口。 如果您在执行此代码时遇到任何问题,请将其放在评论中。我很乐意尽我所能提供帮助。
编辑-1:
现在,我猜您已经能够解决 sActivity 中的意图,但是您在 sActivity 上显示来自位置和列表的数据时遇到了问题。所以,首先要确保你已经通过了点击位置以及意图中的整个列表。在 sActivity 中解决它们。现在,要在列表中的 sActivity 中显示数据,请编写以下代码行(在解析 sActivity 上的意图之后)。
yourTextView.setText(yourList.get(clickedPosition).getSomething());
yourTextView2.setText(yourList.get(clickedPosition).getSomeOtherThing());
不要被 getSomething() 搞糊涂了,它只是一个例子。您应该在此处获取要显示的数据。我还没有看到你正在制作的列表,所以我已经放了这段代码。现在,处理下一个和上一个按钮的点击。只需在下次点击时添加到点击位置变量,如:
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickedPosition++;
yourTextView.setText(yourList.get(clickedPosition).getSomething());
yourTextView2.setText(yourList.get(clickedPosition).getSomeOtherThing());
}
});
在上一个按钮 onClick 上,只需减少 clickedPosition 变量,如:
clickedPosition--;
//set text views here then
我的朋友,这应该做到。
如果您有静态列表并且不想动态更改列表数据,最简单的方法是将列表数据存储在 strings.xml
文件中,例如
<string-array name="textview1_items>
<item>head1</item>
<item>head2</item>
<item>head3</item>
.
.
.
</string-array>
同样适用于 textview 2 项。
然后在您的列表适配器和第二个 activity.
中从这些字符串数组中检索列表项要从 java 访问这些数组,您需要执行以下操作:
String[] headers = context.getResources.getStringArray(R.array.textview1_items);
//在适配器中使用上下文,在第二个中使用此 activity
现在,当用户单击列表项时,只需将所选项目的位置传递给第二个 activity 并从您的字符串数组中检索该索引的信息。
希望对您有所帮助! 如有疑问请追问!
您只需要做,
第二个 activity,
str1 = fActivity.listAdapter.getItem(position).data1;
str2 = fActivity.listAdapter.getItem(position).data2;
并且在第一个 activity,
public static ArrayAdapter<List> listAdapter;
好了,你可以得到答案了。
干杯!