0

クリックしたアイテムの非表示フィールドの値を取得できません。

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
     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
4

4 に答える 4

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);
   }
}
于 2013-03-20T08:27:02.753 に答える
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);

そして、system.out.printlnの代わりにandroid Log.i/Log.d/Log.eを使用して何かをログに記録する必要があると思います:)

于 2013-03-20T07:28:24.290 に答える
0
  1. instancofを使用せずに何もキャストしないでください

    したがって、コードは理想的には

    オブジェクト item = view.getItemAtPosition(position);

       if(item instanceof String){
         //cast it
       }
    
  2. 使用したアダプタのタイプを確認してください。 getItem はTYPE Adapter< TYPE >を返します。

于 2013-03-20T07:29:18.950 に答える
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();

        }
    });
于 2013-03-20T07:31:48.063 に答える