I’ve read the previous threads on stackoverflow how to extract the text from a current selected list item. I used the getSelectedItem method but that doesn’t work. What I want to do is get the text from the list element and then on a swipe gesture pass this text onto the other activity. Here is my code for the swipe gesture.
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;
}
}
Please note that my gesture works fine if i omit the listview and string objects but gives an exception if I do this. Any suggestions ?
Have a look here for what getSelectedItem() does. Unless your list has a selection method (check this for a beautiful answer on how to achieve this), you can’t use it. Now if you want to do the above when swiping left on a particular row, then you should an OnTouchListener on each row view (to capture the left swipe) and then, as suggested before, use setTag() and getTag() in that same view in order to store and retrieve the string.