2013-08-13 2 views
0

Я пытаюсь отправить выбранный элемент в другое мероприятие с помощью новых намерений. Но когда я нажимаю на элемент, появляется сообщение application has been stopped working и приложение завершается. Вот мой первый код деятельностиПроходящий списокПросмотреть данные с помощью намерения

public class AndroidListViewActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // storing string resources into Array 
     String[] adobe_products = getResources().getStringArray(R.array.adobe_products); 

     // Binding resources Array to ListAdapter 

     this.setListAdapter(new ArrayAdapter<String>(AndroidListViewActivity.this, R.layout.list_item, R.id.label, adobe_products)); 

     ListView lv =getListView(); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int pos, 
        long id) { 
       // TODO Auto-generated method stub 
       String product = ((TextView) view).getText().toString(); 


       Intent curentScreen = new Intent(getApplicationContext(), SingleItem.class); 
       curentScreen.putExtra("product", product); 

       startActivity(curentScreen); 
      } 
     });   

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.android_list_view, menu); 
     return true; 
    } 

} 

Второй код вида деятельности.

public class SingleItem extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.single_list_item_view); 
     TextView txtProduct = (TextView) findViewById(R.id.product_label); 

     Intent i = getIntent(); 
     // getting attached intent data 
     String product = i.getStringExtra("product"); 
     // displaying selected product name 
     txtProduct.setText(product); 

    } 
} 

StackTrace:

08-13 14:05:35.678: D/AndroidRuntime(267): Shutting down VM 
08-13 14:05:35.698: W/dalvikvm(267): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
08-13 14:05:35.728: E/AndroidRuntime(267): FATAL EXCEPTION: main 
08-13 14:05:35.728: E/AndroidRuntime(267): java.lang.ClassCastException: java.lang.String 
08-13 14:05:35.728: E/AndroidRuntime(267): at com.list.androidlistviewactivity.AndroidListViewActivity$1.onItemClick(AndroidLi‌​stViewActivity.java:39)  
08-13 14:05:35.728: E/AndroidRuntime(267): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.widget.ListView.performItemClick(ListView.java:3382) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.os.Handler.handleCallback(Handler.java:587) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.os.Looper.loop(Looper.java:123) 
08-13 14:05:35.728: E/AndroidRuntime(267): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-13 14:05:35.728: E/AndroidRuntime(267): at java.lang.reflect.Method.invokeNative(Native Method) 
08-13 14:05:35.728: E/AndroidRuntime(267): at java.lang.reflect.Method.invoke(Method.java:521)  
08-13 14:05:35.728: E/AndroidRuntime(267): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-13 14:05:35.728: E/AndroidRuntime(267): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-13 14:05:35.728: E/AndroidRuntime(267): at dalvik.system.NativeStart.main(Native Method) 
+1

Опубликуйте сообщение об ошибке LogCat –

+0

LogCat может быть просто ключом, пожалуйста, вставьте его. – g00dy

+0

проверьте свой лог-кот и опубликуйте исключение здесь plz. –

ответ

0

Вместо этого, вы можете получить строку product, как показано ниже:

Заменить строку ниже в onItemClick

String product = ((TextView) view).getText().toString(); 

с

TextView tv = (TextView)view.findViewById(R.id.textview1); 
String product = tv.getText().toString(); 
+0

Мне было бы очень интересно увидеть, что 'ArrayAdapter ' вернет объект 'Cursor' ... Измените последние две строки кода на' String product = (String) lv.getItemAtPosition (pos); 'вместо. –

+0

@Acadhani Y не работает – FAISAL

+0

@MH все еще не работает. – FAISAL

3

Заменить этот

String product = ((TextView) view).getText().toString(); 

с

TextView tv = (TextView)view.findViewById(R.id.label); //initialize text view withid label 
String product = tv.getText().toString(); //get the text 

Или

String product = (String)parent.getItemAtPosition(pos); 
Toast.makeText(getApplicationContext(), product,Toast.LENGTH_SHORT).show(); 

Тогда

  Intent curentScreen = new Intent(ActivityName.this, SingleItem.class); 
      curentScreen.putExtra("product", product); 
      startActivity(curentScreen); 

Пример: здесь, когда вы нажимаете строку списка, вы можете увидеть тост.

list_item

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/label" // textview with id label 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="48dp" 
     android:text="TextView" /> 

</RelativeLayout> 

strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="planets_array"> 
     <item>Mercury</item> 
     <item>Venus</item> 
     <item>Earth</item> 
     <item>Mars</item> 
    </string-array> 

</resources> 

MainActivity

public class MainActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] planets = getResources().getStringArray(R.array.planets_array); 
     this.setListAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.list_item, R.id.label, planets)); 
     ListView lv =getListView(); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int pos, 
        long id) { 
       // TODO Auto-generated method stub 
       TextView tv = (TextView)view.findViewById(R.id.label); 
       String product = tv.getText().toString(); 
       Toast.makeText(getApplicationContext(), product,Toast.LENGTH_SHORT).show(); 
      } 
     });   

    } 
} 

Snap Shot

enter image description here

+0

идеальный ... я собирался опубликовать это любым способом – Developer

+0

Thanx @Raghunandan. – FAISAL

1

Способ, которым вы начинаете свою вторую деятельность, не прав.

Заменить строку, в которой вы создаете свой Intent

Intent curentScreen = new Intent(getApplicationContext(), SingleItem.class); 

с

Intent intent = new Intent(AndroidListViewActivity.this, SingleItem.class); 

В качестве первого аргумента в Intent конструктора вы должны передать исходный активность, т.е. this. Поскольку вы вызываете функцию в OnItemClickListener, вы вызываете ее с помощью AndroidListViewActivity.this. Надеюсь, это решит ошибку.

+0

Цель намерения = новое намерение (AndroidListViewActivity.this, SingleItem.class); Цель намерения = новое намерение (getApplicationContext(), SingleItem.class); @Terry Думаю, оба работают одинаково .... ?? Но мое приложение работает с первым. Thanx .. – FAISAL

Смежные вопросы