获取列表视图中单击项的隐藏字段值

时间:2013-03-20 07:23:01

标签: android listview

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

我跟着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"/>

现在我尝试将每个listview项的值设置为 -

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

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

4 个答案:

答案 0 :(得分: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);
   }
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

  1. 不使用 instancof

    投射任何内容

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

    Object item = view.getItemAtPosition(position);

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

答案 3 :(得分:0)

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

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

        }
    });