2015-05-07 7 views
-1

У меня проблема с адаптером.add(). Это приводит к сбою моего приложения.adapter.add() аварийное приложение

Мои MainActivity здесь:

package com.example.olev.shoppinglist; 

import android.content.Intent; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import java.util.ArrayList; 



public class MainActivity extends ActionBarActivity { 

ArrayList<String>productNames=new ArrayList<String>(); 
ArrayAdapter<String> adapter; 


public void addNewProduct(View view){ 
    Intent i = new Intent(this,AddProduct.class); 
    startActivity(i); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    addToList(); 
    ListView productList=(ListView)findViewById(R.id.productList); 
    adapter = new CustomAdapter(this,productNames); 

    productList.setAdapter(adapter); 
} 

public void addToList(){ 
    Bundle itemData=getIntent().getExtras(); 

    if(itemData==null){ 
     return ; 
    } 
    String product=itemData.getString("product"); 
    productNames.add(product); 
    //adapter.notifyDataSetChanged(); 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 




} 

также мой AddProduct:

package com.example.olev.shoppinglist; 

import android.content.Intent; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 




public class AddProduct extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_add_product); 
} 

public void sendProductToMain(View view){ 
    EditText productName= (EditText)findViewById(R.id.productName); 
    String product= productName.getText().toString(); 
    Intent i = new Intent (this,MainActivity.class); 
    i.putExtra("product",product); 
    startActivity(i); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

Кроме того им с помощью CustomAdapter, которая простирается ArrayAdapter.

Моя проблема в том, что если я запустил этот код, как есть, я могу добавить элемент в listview, но по мере того, как я пытаюсь добавить еще один, первый будет перезаписан. Поэтому у меня есть только один элемент. Если я удалю комментарий на строке adapter.notifyDataSetChanged(); приложение падает при достижении этой линии.

Я также попробовал adapter.add (продукт); Результат такой же, как и в строке выше - сбой приложений.

Я искал ответ здесь, но не могу его найти.

Мой вопрос в том, как исправить это, чтобы я мог динамически добавлять элемент в ListView ??

EDIT:

им сообщение об ошибке получения

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.olev.shoppinglist/com.example.olev.shoppinglist.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.notifyDataSetChanged()' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.notifyDataSetChanged()' on a null object reference 
      at com.example.olev.shoppinglist.MainActivity.addToList(MainActivity.java:48) 
      at com.example.olev.shoppinglist.MainActivity.onCreate(MainActivity.java:32) 
      at android.app.Activity.performCreate(Activity.java:5937) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
+2

Вам необходимо опубликовать трассировку стека исключения. Просто сказать «сбой» на самом деле не помогает. – Natix

ответ

1

Это потому, что вы отправляете строки вместо списка из вашей первой деятельности на другой вид деятельности. т. Е. Предположим, что строка putExtra («продукт», «элемент 1») предназначена для отправки элемента item1 строки в вашем втором действии. Когда вы вызываете свое второе действие, список снова инициализируется, и в список добавляется только один элемент i.e. «Item1».

Чтобы отправить список, вы можете использовать aim.putParcelableArrayListExtra («ключ», значение); метод.

+0

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/77303/discussion-on-answer-by-mohit-rajput-adapter-add-crashes-application). – Taryn