除了使用getSelectedItem之外,如何从当前选择的listview元素中提取文本?

时间:2012-11-29 11:31:57

标签: java android listview android-intent

我已经阅读了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;
}

}

请注意,如果我省略listview和字符串对象,我的手势可以正常工作,但如果我这样做,则会出现异常。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

看看here了解getSelectedItem()的作用。除非您的列表有选择方法(检查this以获得有关如何实现此目的的美妙答案),否则您无法使用它。现在如果你想在特定行上向左滑动时执行上述操作,那么你应该在每个行视图上捕获一个OnTouchListener(以捕获左侧滑动),然后按照之前的建议使用setTag()和getTag()在同一个视图中,以便存储和检索字符串。