列表项单击,详细活动导航列表视图活动中的下一个和上一个列表项

时间:2016-05-17 02:27:08

标签: android list listview android-intent navigation

我有2个活动,第1个包含列表视图,当用户点击该列表视图的列表项时,将启动详细视图活动(第2个活动)。

现在在第二个活动中,我有2个按钮, NEXT 按钮和 PREVIOUS 按钮,因此当用户点击NEXT按钮时,第一个活动的下一个列表项必须显示。点击上一个按钮,必须显示上一个列表项。

我在第一个活动上扩展了ArrayAdapter,以显示自定义列表项。在适配器上,有2个项目,即2个textviews。

当用户点击并启动第二个活动时,将详细显示这两个textview的详细信息。并且通过项目进行导航,返回到第一个活动,然后再次针对每个项目启动第二个活动,这对于用户来说是忙碌的场景,因此我想要在详细视图活动本身上导航项目。 那么我应该做什么?

到目前为止我所做的是,我已经扩展了ArrayAdapter,所以从getView()方法开始,我已经取得了位置值,然后在第二次活动中我做了,

 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));

        }
    });

但我不知道接下来应该做什么?

  

位置值取自第1个活动   intent.putExtra(" position",position)并在第二个活动上获取   使用intent.getStringExtra(" position")。

我甚至无法理解thisthat,只是理论上的。提前谢谢。

EDIT-1:

我在第一个活动中有自定义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>
正如我之前在同一小组讨论过的那样。现在在第二个活动中,我必须在第二个活动中使用下一个和上一个按钮获得txt1txt2

4 个答案:

答案 0 :(得分:0)

为此,您必须保持您的阵列/列表全局,以便两个活动都可以访问它。您可以通过将整个数组/列表传递给下一个活动来完成此操作。

您必须执行以下操作:

  1. 将已点击的位置和整个数组/列表放入捆绑包中,然后将其发送到第二个活动。
  2. 从捆绑中获取当前位置和数组/列表,并显示当前位置的详细信息。
  3. 单击“下一步”按钮增加位置,从list.array获取此位置的项目并显示该位置的详细信息。
  4. 点击Previous按钮减少位置,从list.array获取此位置的项目并显示该位置的详细信息。

答案 1 :(得分:0)

如果您粘贴用于填充ListView的代码,那将非常有用。你用什么类型的对象来创建列表?尽管如此,这里有一些代码和方法。我在这里假设一些事情,如果它们与你的代码不符,那就回答一下。

  1. 创建一个ArrayList,现在这可以像字符串ArrayList<String>或您想要的其他对象一样简单,例如ArrayList<Items> // sample Array<Items> itemsList = new ArrayList<Items>();

  2. 现在在列表视图的itemClickListener中,使用Intents将位置和整个数组列表传递给第二个活动。

    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);
    }
    

    });

  3. 在您的活动2中,解析意图数据:

    Intent i = this.getIntent(); int clickedPosition = i.getIntExtra(position, 0); ArrayList<Items> itemsList = i.getSerializableExtra("itemList");

  4. 通过将对象放在itemsList中的位置来设置文本视图的数据:

    textView1.setText(itemsList.get(clickedPosition).getSomeText()); textView2.setText(itemsList.get(clickedPosition).getSomeOtherText());

  5. 最后,当你点击下一个&amp;活动2上的前一个按钮,然后增大或减小clickedPosition变量的大小,使其指向列表中的右侧对象。请确保您从数组列表中请求的索引有效,否则您将获得索引超出范围的异常。这可以通过在请求该索引处的对象之前检查数组列表的大小来完成。

    现在,这个答案假定了很多东西,比如你有一些对象的数组列表。这些对象中的变量至少具有getter方法,并且这些变量所在的类实现了Serializable接口。 如果您在实现此代码时遇到任何问题,请将其放在注释中。我会很乐意以任何方式提供帮助。

    EDIT-1:

    现在,我猜你能够解决你的sActivity中的意图,但是你面临着从位置和列表显示sActivity数据的问题。所以,首先要确保你已经通过了点击的位置以及意图中的整个列表。在sActivity中解决它们。现在,要从列表中显示sActivity中的数据,请编写以下代码行(在解析sActivity意图之后)。

    yourTextView.setText(yourList.get(clickedPosition).getSomething());
    yourTextView2.setText(yourList.get(clickedPosition).getSomeOtherThing());
    

    不要被getSomething()弄糊涂,这只是一个例子。您应该在此处获取要显示的数据。我还没有看到你正在制作的清单,所以我已经把这个代码放了。现在,处理下一个&amp;之前的按钮点击。只需在下一次单击时添加到单击的位置变量,如:

    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
    

    这应该是我的朋友。

答案 2 :(得分:0)

如果您有静态列表并且不想动态更改列表数据,最简单的方法是将列表数据存储在strings.xml文件中,如

<string-array name="textview1_items> 
<item>head1</item>
<item>head2</item>
<item>head3</item>
.
.
.
</string-array>

同样适用于textview 2项。

然后从列表适配器和第二个活动中的这些字符串数组中检索列表项。

要从java访问这些数组,您需要执行以下操作:

String[] headers = context.getResources.getStringArray(R.array.textview1_items); //在适配器中使用上下文,在第二个活动中使用此

现在,当用户单击列表项时,只需将所选项的位置传递给第二个活动,并从字符串数组中检索该索引的信息。

希望它有所帮助! 如有任何疑问,请询问!

答案 3 :(得分:0)

你只需要做,

在第二项活动中,

str1 = fActivity.listAdapter.getItem(position).data1;
str2 = fActivity.listAdapter.getItem(position).data2;

并在第一项活动中

public static ArrayAdapter<List> listAdapter;

然后你去,你可以得到答案。

干杯!