【问题标题】:getting the hidden field value of clicked item in a listview获取列表视图中单击项目的隐藏字段值
【发布时间】:2013-03-09 04:41:52
【问题描述】:

我无法获取点击项的隐藏字段值。

我关注SO Post 来获取点击的列表视图项的隐藏值,但是 无法获得价值。我收到ClassCastException

代码 -

listView.setOnItemClickListener(new OnItemClickListener() 
{
   //////////list view on click
   public void onItemClick(AdapterView<?> view, View arg1,
      int position, long arg3) {

      String S = (String)view.getItemAtPosition(position); //This line gives exception
      System.out.println("TextView vehicleSrc>>"+S);


     //OR

    String itemSelected =  ((TextView)view.findViewById(R.id.vehicle_source)).getText().toString();
   System.out.println("TextView vehicleSrc"+itemSelected); // this is giving blank
   }

我的错误日志 -

03-20 12:47:08.742: E/AndroidRuntime(26965): FATAL EXCEPTION: main
03-20 12:47:08.742: E/AndroidRuntime(26965): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
03-20 12:47:08.742: E/AndroidRuntime(26965):    at com.iddl.main.EntryFragment$13$2.onItemClick(UserFragment.java:907)

更新:

我已经在xml的隐藏字段中定义了上面的textview-

<TextView
     android:id="@+id/vehicle_source"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="" 
     android:visibility="gone"/>

现在我正在尝试将每个列表视图项的值设置为 -

TextView vehicleSrc = (TextView) vi.findViewById(R.id.vehicle_source);

if(isCondition1)
vehicleSrc.setText("Normal");
else
vehicleSrc.setText("Other");
end

【问题讨论】:

  • 尝试整数值 = (Integer)view.getItemAtPosition(position);
  • 也可以使用 String s = String.valueOf(view.getItemAtPosition(position));
  • @Neil 这给了我点击的项目位置,但我无法获得点击的项目隐藏字段值。查看更新。
  • @SaurabhJain : android:visibility="gone" 完全删除视图,而不仅仅是隐藏它。

标签: android listview


【解决方案1】:

最后我得到了被点击项目的隐藏字段值。

应该是这样的

String itemSelected = ((TextView)arg1.findViewById(R.id.vehicle_source)).getText().toString();

而不是

String itemSelected =  ((TextView)view.findViewById(R.id.vehicle_source)).getText().toString();

完整代码 -

listView.setOnItemClickListener(new OnItemClickListener() 
{
   //////////list view on click
   public void onItemClick(AdapterView<?> view, View arg1,
      int position, long arg3) {

    String itemSelected =  ((TextView)arg1.findViewById(R.id.vehicle_source)).getText().toString();
   System.out.println("TextView vehicleSrc"+itemSelected);
   }
}

【讨论】:

    【解决方案2】:

    你不能像这里警告的那样将整数转换为字符串

    03-20 12:47:08.742: E/AndroidRuntime(26965): FATAL EXCEPTION: main
    03-20 12:47:08.742: E/AndroidRuntime(26965): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    03-20 12:47:08.742: E/AndroidRuntime(26965):    at com.iddl.main.EntryFragment$13$2.onItemClick(UserFragment.java:907)
    

    如果你想将整数转换为字符串,你可以使用

    Integer.toString( i )
    

    喜欢这个

    String S = Integer.toString(view.getItemAtPosition(position)); //This line gives exception
          System.out.println("TextView vehicleSrc>>"+S);
    

    我认为您应该使用 android Log.i/Log.d/Log.e 来记录任何内容,而不是 system.out.println :)

    【讨论】:

    • 第一行有语法错误。它正在给予 - The method toString(int) in the type Integer is not applicable for the arguments (Object)
    【解决方案3】:
    1. 不使用 instancof

      就不要投射任何东西

      所以理想情况下你的代码应该是

      对象项 = view.getItemAtPosition(position);

         if(item instanceof String){
           //cast it
         }
      
    2. 只需检查您使用的适配器类型.. getItem 返回 TYPE 适配器TYPE>

    【讨论】:

      【解决方案4】:

      试试这个你会得到被点击的列表列表的值

                  String textOfSelectedItem;
                        listView.setOnItemClickListener(new OnItemClickListener() {
      
              @Override
              public void onItemClick(AdapterView<?> arg0, View v, int id,
                      long position) {
                  // TODO Auto-generated method stub
                   textOfSelectedItem  =((TextView) v).getText().toString();
                  Toast.makeText(getApplicationContext(), "Clicked is " + textOfSelectedItem, Toast.LENGTH_SHORT).show();
      
              }
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多