0

現在選択されているリストアイテムからテキストを抽出する方法について、stackoverflowに関する以前のスレッドを読みました。getSelectedItemメソッドを使用しましたが、機能しません。私がやりたいのは、リスト要素からテキストを取得し、スワイプジェスチャでこのテキストを他のアクティビティに渡すことです。これがスワイプジェスチャのコードです。

public class Descriptor extends ListActivity {

private GestureDetector gestureDetector;
@SuppressWarnings("deprecation")

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.descriptor);

    gestureDetector = new GestureDetector(new SwipeGestureDetector());

    ListView listView = (ListView) findViewById(android.R.id.list);
     // storing string resources into Array
   String[] story_titles = getResources().getStringArray(R.array.story_list);

   // Binding resources Array to ListAdapter

   ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,android.R.id.text1,story_titles);

   listView.setAdapter(adapter);

   //set single choice of list at a time
   listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);


   //setting the story description when item clicked from selector class

   TextView story_desc = (TextView) findViewById(R.id.story_desc);

   ImageView image_desc = (ImageView) findViewById(R.id.imageView1);


   Intent i = getIntent();

   String title = i.getStringExtra("title");

   if(title.equalsIgnoreCase("The Ant and the Grasshopper")){
   story_desc.setText(R.string.ant_desc);
   image_desc.setImageResource(R.raw.ant_and_grasshopper);
   }

   if(title.equalsIgnoreCase("The Fox and the Grapes")) {
       story_desc.setText(R.string.fox_desc);
       image_desc.setImageResource(R.raw.fox);
   }

   if(title.equalsIgnoreCase("The Wind and the Sun")){
       story_desc.setText(R.string.wind_desc);
       image_desc.setImageResource(R.raw.wind_and_the_sun);
   }

   if(title.equalsIgnoreCase("The Miser and his Gold")){   
       story_desc.setText(R.string.miser_desc);
       image_desc.setImageResource(R.raw.miser);
   }

   if(title.equalsIgnoreCase("The Frog and the Ox")){
       story_desc.setText(R.string.frog_desc);
       image_desc.setImageResource(R.raw.frog_and_ox);
   }

}

public void onListItemClick(ListView parent,View view, int position, long id) {
    String title = ((TextView) view).getText().toString();

    TextView story_desc = (TextView) findViewById(R.id.story_desc);

    ImageView image_desc = (ImageView) findViewById(R.id.imageView1);

    if(title.equalsIgnoreCase("The Ant and the Grasshopper")){
           story_desc.setText(R.string.ant_desc);
           image_desc.setImageResource(R.raw.ant_and_grasshopper);
           }

           if(title.equalsIgnoreCase("The Fox and the Grapes")) {
               story_desc.setText(R.string.fox_desc);
               image_desc.setImageResource(R.raw.fox);
           }

           if(title.equalsIgnoreCase("The Wind and the Sun")){
               story_desc.setText(R.string.wind_desc);
               image_desc.setImageResource(R.raw.wind_and_the_sun);
           }

           if(title.equalsIgnoreCase("The Miser and his Gold")){   
               story_desc.setText(R.string.miser_desc);
               image_desc.setImageResource(R.raw.miser);
           }

           if(title.equalsIgnoreCase("The Frog and the Ox")){
               story_desc.setText(R.string.frog_desc);
               image_desc.setImageResource(R.raw.frog_and_ox);
           }


}

public boolean onTouchEvent(MotionEvent event) {
    if (gestureDetector.onTouchEvent(event)) {
      return true;
    }
    return super.onTouchEvent(event);
  }

private void onLeftSwipe() {


   Intent intent = new Intent(this,Story.class);
   startActivity(intent);
  }

  private void onRightSwipe() {
    // Do something
  }


private class SwipeGestureDetector extends SimpleOnGestureListener {

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 200;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2,
         float velocityX, float velocityY) {
      try {
        float diffAbs = Math.abs(e1.getY() - e2.getY());
        float diff = e1.getX() - e2.getX();

        if (diffAbs > SWIPE_MAX_OFF_PATH)
          return false;

        // Left swipe
        if (diff > SWIPE_MIN_DISTANCE
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
           Descriptor.this.onLeftSwipe();

        // Right swipe
        } else if (-diff > SWIPE_MIN_DISTANCE
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
          Descriptor.this.onRightSwipe();
        }
      } catch (Exception e) {
        Log.e("YourActivity", "Error on gestures");
      }
      return false;
    }
    } 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

リストビューオブジェクトと文字列オブジェクトを省略した場合、ジェスチャは正常に機能しますが、これを行うと例外が発生することに注意してください。助言がありますか ?

4

1 に答える 1

0

getSelectedItem()の機能についてはこちらをご覧ください。あなたのリストに選択方法がない限り(これを達成する方法についての美しい答えについてはこれをチェックしてください)、あなたはそれを使うことができません。特定の行を左にスワイプするときに上記を実行する場合は、各行ビューでOnTouchListenerを実行して(左のスワイプをキャプチャするため)、前に提案したように、同じ中でsetTag()とgetTag()を使用する必要があります。文字列を保存および取得するために表示します。

于 2012-11-29T12:23:27.233 に答える