【问题标题】:Open activity displaying the detail of each row in listview打开活动,在列表视图中显示每一行的详细信息
【发布时间】:2015-02-04 16:19:37
【问题描述】:

我想打开对象的列表视图并单击列表行,它将打开另一个显示该行的新闻详细信息的活动。到目前为止,我能够打开一个新活动,当单击列表中的行时显示行名。 但我不知道如何为每一行进行活动以显示一些不同的信息,例如每行的地址、联系信息开放时间。

这是我第一个显示列表视图的活动

 // storing string resources into Array
 String []Buildings_halls = getResources().getStringArray(R.array.halls);

    // Binding resources Array to ListAdapter
    this.setListAdapter(new ArrayAdapter<String>(this, R.layout.hallstudent, R.id.listhall, Buildings_halls));

 }

 protected void onListItemClick(ListView lv, View v, int position, long id){
     super.onListItemClick(lv, v, position, id);     

Intent intent = new Intent();
intent.setClass(StudentHall.this, StudentHallSelect.class);

intent.putExtra("position", position);

// Or / And
intent.putExtra("id", String.valueOf(id));
intent.putExtra("description", getResources().getStringArray(R.array.hallsdescription));
startActivity(intent);

        }               

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    finish();
}
}
this is my second code package 





 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.selecthall);
        // TODO Auto-generated method stub


        Intent intent = getIntent(); 
        int position = intent.getIntExtra("position", 0);
        String halldetails=intent.getStringExtra("description");

        TextView TextView1 = (TextView) findViewById(R.id.select_details);
        TextView1.setText(String.valueOf(halldetails));
        // Here we turn your string.xml in an array
        String[] myKeys = getResources().getStringArray(R.array.halls);

        TextView myTextView = (TextView) findViewById(R.id.selecthalllist);
        myTextView.setText(myKeys[position]);


    }
}



 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/select_details"
        android:padding="10dp"
        android:text="@string/news_description"
        android:textAppearance="?android:attr/textAppearanceMedium" />



</LinearLayout>

我在我的新活动中获得了列表和 Null 的名称,但没有获得我存储在我的 array.xml 文件中的详细信息。 谢谢

【问题讨论】:

  • 您是否要询问下一个屏幕会出现什么情况positionid。或者是其他东西。您在intent.putExtra 中传递的所有内容都可以在下一个屏幕中使用
  • 您在下一个活动中点击了该项目的位置。使用存储信息的位置获取信息并显示。
  • 是的,我这样做有问题.. 我尝试的是从 arrays.xml 中获取另一个与 String [] Buildings 相同的数组字符串,其中包含每个建筑物的详细信息。但我不能把它放在适配器上..我尝试为每个数组创建两个单独的适配器,但没有用..
  • 关于使用意图,我不知道 put.extra (value, value) 中的参数值如何保存详细信息并将其传递给另一个活动,因为我不断收到错误,例如无法解决变量..是否应该引用该值才能使用它?,该值如何保存我想要传递给另一个活动的这些细节?对不起,业余问题!

标签: android listview android-intent arraylist pass-data


【解决方案1】:

这取决于这些额外信息的存储位置和方式。我更喜欢使用该位置从第二个活动中检索此信息,但如果此方法不适合您,还有其他方法。

您可以使用与定位相同的方法传递所有需要的信息。您可以在同一意图中添加不同的数据类型,例如 intStringfloatlongbytebooleanArrays 以及 ParcelableSerializable 元素。

只需在第一个活动中使用intent.putExtra("key", value);,在第二个活动中使用getIntExtra("key", defaultValue)getLongExtra("key", defaultValue)getFloatExtra("key", defaultValue)...,具体取决于每个额外活动的类型。

【讨论】:

  • 您好,感谢您的回答,但我对此意图有一些疑问。putExtra("key", value);..如何/我在哪里分配/存储我的信息,以便我可以使用发送它价值。我已将此信息存储在 array.xml 文件中,如下所示 Address:, Telephone No:,Opening Times:
  • 如果你想使用一个字符串数组,你应该这样声明它:&lt;string-array name="hallsdescription"&gt; &lt;item&gt;Address&lt;/item&gt; &lt;item&gt;Telephone&lt;/item&gt; &lt;item&gt;Opening Times&lt;/item&gt; &lt;/string-array&gt; 然后,在第一个活动中,intent.putExtra("key", getResources().getStringArray(R.array.hallsdescription));
  • 感谢您的回复..我更新了上面的代码,当我执行它们时,我只看到在新活动上写了 null。
  • 应该是String[] Descriptions = intent.getStringArrayExtra("description");
【解决方案2】:

关于将选定对象从列表传递到详细信息屏幕的情况,请参见此处: How to view detailed data of a specific list view item

或者,如果您的数据位于 SQLite DB 中,您可以:

  1. 使用 CursorAdapter
  2. 传递选中项的id参数
  3. 在您的详细信息屏幕中,使用 ID 参数查询所选对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2014-02-12
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多