【问题标题】:How do I make the ListView clickable and show some text once it gets clicked?如何使 ListView 可单击并在单击后显示一些文本?
【发布时间】:2015-02-18 23:25:03
【问题描述】:

我正在练习 ListView,并且我在一个活动中放置了一些列表项。现在我有 3 项列表(三行)。我希望一旦用户单击其中一行(假设这是我现在的第一行),他/她应该能够看到有关它的一些详细信息文本。该文本将显示在 Activity 底部的某个位置,在 ListView 之外。我该怎么做? 像这样:

我正在处理这段代码:

MainActivity.java:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String[] list = {"About Company", "Home Page", "Contact"};

        Adapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

        ListView listView = (ListView) findViewById(R.id.listId);

        listView.setAdapter((ListAdapter) adapter);

        listView.setOnItemClickListener(

                new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        String listPosition = String.valueOf(parent.getItemAtPosition(position));
                        /*after clicking the first row of the list show the following info :
                        NAME: Some name
                        ADDRESS: Somewhere
                         */
                    }
                }
        );


    }
}

activity_main.xml:

    <ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listId"

    android:background="#f79727"
    android:textFilterEnabled="false"
    android:layout_marginBottom="300dp" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_alignBottom="@+id/listId"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="66dp" />

【问题讨论】:

  • 定义你的布局。您可能希望将第二个ListView 替换为一些显示信息的视图,例如一些TextViews。完成后,您可以将这些视图刷新到您设置的OnItemClickListener
  • 为什么你使用了两个列表视图?

标签: android android-layout android-activity android-listview android-adapter


【解决方案1】:

我认为您需要良好的代码工作示例和教程。一个很好的链接是 [Using an ArrayAdapter with ListView][1]

[1]: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView 。 您要求填充 Listview,查看扩展 ArrayAdapter 的代码。 既然要在底部写文字,可以在res/layout/item_user.xml中的LinearLayout之外创建一个TextView。这是一种简单的方法。尝试一些代码,看看你得到了什么。你必须参加一半,因为你可以在这里学到很多东西。

【讨论】:

    【解决方案2】:

    在列表视图上添加一个 onClickListener。单击时设置下面的文本。

    【讨论】:

    • Graeme,我知道如何让按钮被点击,但我不知道如何以及在哪里定义和设置我想要显示的文本。
    • Riyana 在项目点击监听器上使用了正确的方法
    【解决方案3】:

    试试这个

    XML

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignBottom="@+id/listId"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="66dp"
    
        android:choiceMode="singleChoice"
    
     />
    

    单击监听器列表视图

    listView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position,
                        long id) {
                     String listPosition = list[position];
                    Toast.makeText(MainActivity .this, listPosition , Toast.LENGTH_LONG).show();
                }
            });
    

    【讨论】:

    • 豪尔赫·莫雷诺,不完全是我想要的。因为点击列表后它应该显示一些特定的文本:例如:“公司名称:沃尔沃;地址:某个地址”。但是现在根据您的建议,它只会从当前索引中获取值并将其显示为文本。
    • Riyana 想要将文本显示为标签。这里吐司不行。
    【解决方案4】:

    将您的代码更改为以下内容

    String[] descriptionList = {"Company's Address....", "Home Address....", "Contact no...."};
    

    您的 XML 文件内容

    <ListView android:layout_width="match_parent"
     android:layout_height="match_parent" 
    android:id="@+id/listId"
     android:background="#f79727"
     android:textFilterEnabled="false"
     android:layout_marginBottom="300dp" />
    
        <TextView android:layout_width="wrap_content"
     android:layout_height="wrap_content" android:id="@+id/textview" android:layout_alignBottom="@+id/listId"
     android:layout_centerHorizontal="true"
     android:layout_marginBottom="66dp" />
    

    在 oncreate() 方法中初始化文本视图

    textView =(TextView)findViewById(R.id.textview);
    

    你的 ontemclick 监听器

     listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       textView.setText(descriptionList.get(position));
        } } );
    

    【讨论】:

    • Fahim,谢谢你,但是我在哪里存储或定义我想要显示的文本。从这行代码: textView.setText(listPosition);它只显示存储在 listPosition 中的列表的名称。如果我想显示自定义文本怎么办?
    • 你不必定义它,它会从适配器中提取,如代码所示。只需在 oncreate() 方法中初始化 textview 以在 onitemclick 方法中使用它。希望你能理解
    • Fahim,没有定义如何获取默认文本?因为它没有存储在任何地方?
    • 法希姆,你可能还有误会。你采取措施帮助我真是太好了。但我想要的是当用户单击列表时,textView 区域将显示一些默认文本:此默认文本将是我想要自己选择的文本。好的,这就是我想要的: 第 1 步:单击第一个列表;第 2 步:显示以下文本:“名称:Sony;地址:美国”。我如何显示该文本?这意味着在单击列表后应该出现一段文本!
    • ok.. 您将拥有每个 listview 位置右侧的文本内容列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2020-12-17
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多