【问题标题】:How to extract the text from the selected item on the listView如何从listView上的选定项目中提取文本
【发布时间】:2012-02-09 10:06:37
【问题描述】:

我有一个包含一些项目的列表视图。我想从所选项目中获取文本。

这是我的列表适配器和 onItemClickListener:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));


    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
??????
    }});
        }

您能告诉我如何从所选项目中获取字符串。

方法((TextView)视图).getText()不起作用,我有一个

ClassCastException: android.widget.LinearLayout

我已经找到了解决方案,也许有人会需要它:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            TextView textView = (TextView) view.findViewById(R.id.list_content);
            String text = textView.getText().toString(); 
            System.out.println("Choosen Country = : " + text);

    }});

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    使用这个:

    String selectedFromList = (String) (lv.getItemAtPosition(position));
    

    无论列表中的数据类型是什么,都进行相应的转换。

    希望它会有所帮助。 :)

    【讨论】:

    • 不错的简单答案! =)
    • 如果您只是将字符串放入适配器中,那么执行上述操作应该没有问题,只需将其转换为字符串以避免任何错误。弦合金 = (String) lv.getItemAtPosition(position);
    • 编辑:String selectedFromList = (String) lv.getItemAtPosition(position);
    • @AliObeid 根据您的建议进行了编辑。 @ColossalChris
    【解决方案2】:

    为此,您需要编写以下内容:

    lv.setOnItemClickListener(new OnItemClickListener() {
    
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            TextView textView = (TextView) view.findViewById(R.id.list_content);
            String text = lv.get(position).toString().trim();
            System.out.println("Chosen Country = : " + text);
    
    }});
    

    【讨论】:

      【解决方案3】:

      其他答案看起来不错,但我认为I'd wrap everything 是一个完整的答案。

      multiple ways 来实现这一点,这也取决于您是从simple listView 还是从Custom ListView(with custom_list_item.xml). 获取文本

      对于简单的列表视图

      lv.setOnItemClickListener(new OnItemClickListener() {
      
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
              String text = lv.get(position).tostring().trim();//first method 
              final String text = ((TextView)view).getText();// second method
      }});
      

      用于自定义 ListView

      lv.setOnItemClickListener(new OnItemClickListener() {
      
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
              TextView textView = (TextView) view.findViewById(R.id.list_content);
      //where list_content is the id of TextView in listview_item.xml
      
      }});
      

      别人的问题解答

      @Android Killer 字符串转换丢失。

      @Rishi 没有提供有关使用 R.id.list_content 的详细信息

      【讨论】:

      • 为什么“get”是红色的?
      • @LUKER 你需要改用lv.getItemAtPosition(position)
      【解决方案4】:

      您好,我正在使用带有注册上下文菜单的 CustomListView。在这种情况下,访问自定义列表行中的项目的方式是:

      @Override
      public boolean onContextItemSelected(MenuItem item) {
          AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
          switch (item.getItemId()) {
              case R.id.add:
                      TextView textView = (TextView) info.targetView.findViewById(R.id.yourItem);
                      String text = textView.getText().toString();
                      Toast.makeText(getApplicationContext(), "Selected " + text, Toast.LENGTH_LONG).show(); 
              default:
                      return super.onContextItemSelected(item);
          }
      }
      

      其中 R.id.yourItem 是自定义 Row 中的 textView

      PS:这是我的第一篇文章,希望对你有帮助;-)

      【讨论】:

        【解决方案5】:

        这里供任何偶然发现此问题的人将来参考。 就我而言,我有一个自定义适配器类,类型为我拥有的 POJO 类。还有我想传递给适配器并显示在我的ListView util.List 类的项目。

        我成功将数据传给了ListView,还想获取当前选中的文本。

        例如:我传递的数据是讲师任教的学校列表,因此他必须选择他当时想合作的特定学校,并且登录时我想要将意图传递给讲师选择的当前学校的新Activity

        因此我的 ListView onClick()

        private void loginSuccess() {
            progressDialog.dismiss();
            if (mySchoolsList.size() > 1) {
                schoolsListView = new ListView(MainActivity.this);
                schoolsArrayAdapter = new SchoolListAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mySchoolsList);
                schoolsListView.setAdapter(schoolsArrayAdapter);
        
                dialog = new Dialog(MainActivity.this);
                dialog.setContentView(schoolsListView);
                dialog.setTitle("Welcome " + staff.getFullName());
                dialog.show();
        
        
                schoolsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        //the .getName() is accessed from the School POJO class.
                        String schoolName = schoolsArrayAdapter.getItem(position).getName();
                        intent = new Intent(MainActivity.this, NavMainActivity.class);
                        intent.putExtra("sentIntent", schoolName);
                        startActivity(intent);
                    }
                });
        
            } else {
                intent = new Intent(MainActivity.this, NavMainActivity.class);
                intent.putExtra("sentIntent", recieveName);
                startActivity(intent);
            }
        }
        

        希望有一天这可以拯救某人,因为这里的所有解决方案都不适合我。干杯!

        【讨论】:

          【解决方案6】:

          一定会成功!希望您满意!

          ListView lv=(ListView)findViewById(R.id.listView1);
          
          lv.setOnItemClickListener(new OnItemClickListener() {
          
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                      long arg3) {
                  // TODO Auto-generated method stub
                  String text = (String) lv.getItemAtPosition(arg2);
                  Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
          
              }
          });
          

          【讨论】:

            【解决方案7】:

            如果您在 onItemClick() 方法中使用 List 填充 ListView。

            String s = list.get(position);
            

            您需要能够在内部类中访问此列表

            【讨论】:

            • 不幸的是,我正在使用数据库查询来填充我的列表。我找到了解决方案并编辑了问题。
            【解决方案8】:

            尝试这样做,将其插入 onItemClickListener,我不确定您的 Country 类是什么样的:

            String s = values.get(position).getCountryName();
            Log.e("LISTVIEW", "selected item text = "+s);
            
              or
            
            String s = values.get(position).toString();
            Log.e("LISTVIEW", "selected item text = "+s);
            

            【讨论】:

              【解决方案9】:
              public void onItemClick(**AdapterView**<?> parent, View view, 
                                                          int position, long id) {
              
               }
              

              AdapterView.....---->>>类

              只需要这样做:

                TextView selectedText=(TextView) parent.findViewById(R.id.textView2);
              

              看...你直接得到TextView

              【讨论】:

              • 这可以在 Fragment 中使用
              • 欢迎来到 Stack Overflow!虽然您可能已经解决了这个用户的问题,但纯代码的答案对于将来遇到这个问题的用户来说并不是很有帮助。请编辑您的答案以解释为什么您的代码解决了原始问题。
              【解决方案10】:

              试试这个代码:

              listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                   @Override
                   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                       Toast.makeText(getApplicationContext(),(String)parent.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
                   }
              });
              

              【讨论】:

                【解决方案11】:
                myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> av,
                                                View view, int position, long l) {
                            String text = String.valueOf(myListView.getItemAtPosition(position));
                
                            }
                        }
                    });
                

                【讨论】:

                  【解决方案12】:

                  就这么简单

                  @Override
                          public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                              TextView text1 = (TextView) findViewById(R.id.Text1);
                              TextView text2 = (TextView) findViewById(R.id.Text2);
                  
                              String txt_1 = ""+text1.getText().toString().trim();
                              String txt_2 = ""+text2.getText().toString().trim();
                  
                             //Other_Related_Work
                  
                          }
                      });
                  

                  【讨论】:

                    【解决方案13】:

                    我找到了一个最简单的方法:

                    list_content.xml

                     <TextView
                        <!-- rest of the code -->
                        android:id="@+id/content"
                        android:onClick="get_content"  <!-- Just add this -->
                        />
                    

                    MainActivity

                    public void get_content(View view){
                    
                        TextView textView = view.findViewById(R.id.content);
                        System.out.println("Text is: "+textView.getText().toString());
                    }
                    

                    【讨论】:

                      【解决方案14】:

                      这对我有用。我在这里尝试了一些解决方案,但没有奏效。希望这会有所帮助。

                      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFamily);
                      
                          listViewDemo.setAdapter(arrayAdapter);
                      
                          listViewDemo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                              @Override
                              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      
                                  //String nameSelectedfromList = arrayAdapter.getItem(position).toString();
                                  String nameSelectedfromList = listViewDemo.getItemAtPosition(position).toString();
                      
                                  Log.i("Clicked Item", nameSelectedfromList);
                      
                              }
                          }); 
                      

                      【讨论】:

                        猜你喜欢
                        • 2017-09-27
                        • 1970-01-01
                        • 1970-01-01
                        • 2023-03-18
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多