2015-05-01 4 views
-1

Сценарий:Добавить товары в ListView в Фрагмент

Пользователь Login ---> Запуск MainActivity который имеет Navigation drawer -> Из меню в ActionBar он переходит к новой деятельности

В новой деятельности I имеют edittext с простым button.

Теперь, если я добавлю текст в текст и нажмите кнопку, я размещаю edittext в комплекте, чтобы передать его в MainActivity.

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

Вот моя активность Код:

addlist = (ImageButton) findViewById(R.id.btnaddlist); 
    findViewById(R.id.btnaddlist).setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 
        EditText edit = (EditText) findViewById(R.id.txtlist); 
        Intent i = new Intent(CreateList.this, 
          MainActivity.class); 
        Bundle bundle = new Bundle(); 
        String ItemName = edit.getText().toString(); 
        // Add your data from getFactualResults method to bundle 
        bundle.putString("ListItemName", ItemName); 
        // Add the bundle to the intent 
        i.putExtras(bundle); 
        startActivity(i); 
       } 
      }); 

} 

Это мой HomeFragment:

ListView lv; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    lv = (ListView)rootView .findViewById(R.id.list); 
    Bundle itemintent = getActivity().getIntent().getExtras(); 
    String ItemName = itemintent.getString("ListItemName"); 
    if (ItemName.equals("ListItemName")) { 
     /** Items entered by the user is stored in this ArrayList variable */ 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add(ItemName); 
     /** Declaring an ArrayAdapter to set items to ListView */ 
     ArrayAdapter<String> Listadapter; 
     Listadapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),android.R.layout.simple_list_item_1, list); 
     lv.setAdapter(Listadapter); 
     Listadapter.notifyDataSetChanged(); 
     } 

     return rootView; 
} 

Logcat Ошибка:

05-01 22:54:07.116: D/AndroidRuntime(19368): Shutting down VM 
05-01 22:54:07.143: E/AndroidRuntime(19368): FATAL EXCEPTION: main 
05-01 22:54:07.143: E/AndroidRuntime(19368): Process: com.sample.example, PID: 19368 
05-01 22:54:07.143: E/AndroidRuntime(19368): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.example/com.sample.example.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.access$800(ActivityThread.java:148) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.os.Handler.dispatchMessage(Handler.java:102) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.os.Looper.loop(Looper.java:135) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.main(ActivityThread.java:5312) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at java.lang.reflect.Method.invoke(Native Method) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at java.lang.reflect.Method.invoke(Method.java:372) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
05-01 22:54:07.143: E/AndroidRuntime(19368): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
05-01 22:54:07.143: E/AndroidRuntime(19368): at com.sample.example.HomeFragment.onCreateView(HomeFragment.java:28) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.Fragment.performCreateView(Fragment.java:2053) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.BackStackRecord.run(BackStackRecord.java:833) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1454) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.Activity.performStart(Activity.java:5968) 
05-01 22:54:07.143: E/AndroidRuntime(19368): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277) 
05-01 22:54:07.143: E/AndroidRuntime(19368): ... 10 more 

ответ

0

Легкий подход; В вашем MainActivity получите String от bundle и сохраните его на другом String. Позже перейдите, что String к вашему Fragment s с Argument s или лучше еще Bundle себя.

Теперь к вашей проблеме String ItemName = itemintent.getString("ListItemName"); можно перевести как String ItemName = null почему, потому что getString("ListItemName") вернулся null вы должны были пойти с

String ItemName = itemintent.getString("ListItemName" 
        ,"this default value helps prevent NPE"); //was added in api 12 

с этой вашей Ошибки будет идти, но это не будет окончательным решением, так как вы хотите вернуть String, для этого подходите к простому подходу. это дикое предположение, что я хорошо Я имею в виду причину для BundleIntent будучи nullified, потому что, может быть, ваш Activity был воссоздан с использованием тех же Intent через который он получил nullfied

0

По вашему комментарию, вы получаете данные в вашей деятельности, но не в вашем фрагменте. Возможно, вы не можете получить данные о намерениях, которые начали вашу деятельность в вашем фрагменте, но я нахожу это странным.

Вы можете совершить обход. Когда ваше основное действие создано, получите эти данные и сохраните их в общедоступной переменной.

public String itemName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle extras = getIntent().getExtras(); 
     if(extras != null) { 
      itemName = extras.getString("ListItemName"); 
     } 
     else{ 
      // Something else is wrong 
      finish(); 
     } 
    } 

А потом у вас фрагмент этого

String ItemName = ((MainActivity) getActivity()).itemName; 
+0

@ Боян-К сожалению, его опечатка. Обновлены мои вопросы – coder

+0

Вы получаете данные в своей деятельности? –

+0

Да, я получаю. – coder

0

Пожалуйста, проверьте ваши ошибки ясно заявляет

java.lang.String.equals (java.lang.Object)»на нулевой объект ссылка

Так что в

if (ItemName.equals("ListItemName")), в котором ItemName является нулевым

Вы можете попробовать

this.getArguments().getString("ListItemName")

также передать это с помощью

fragment.setArguments(bundle);

Ниже неправильно

Bundle itemintent = getActivity().getIntent().getExtras(); String ItemName = itemintent.getString("ListItemName");

вы обращаетесь к цели деятельности, в которой значения пучка могут быть нулевыми

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