-3

я получаю следующее исключение, пока я пытаюсь передать данные в представление ресайклера:Ресайклер Вид: java.lang.NullPointerException - android.widget.EditText.getText() на нулевой ссылки на объект

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.laraib.dynamicdataapp, PID: 31538 
       java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 
        at com.example.laraib.dynamicdataapp.MainActivity$1.onClick(MainActivity.java:55) 
        at android.view.View.performClick(View.java:4766) 
        at android.view.View$PerformClick.run(View.java:19683) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5538) 
        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:960) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

Я создал фрагмент в основной деятельности, где фрагмент , на котором размещается вид ресайзера, и класс адаптера событий привязан к представлению recycler для отображения данных. Данные должны быть переданы динамически. Когда пользователь нажимает кнопку плавающей панели действий, откроется всплывающее окно , где пользователь должен ввести значение в текстовое поле редактирования , а при нажатии кнопки ok данные будут добавлены в вид ресайзера фрагмента.

Вот мой код:

EventFragment.java

public class EventFragment extends Fragment{ 

List<Event> event=new ArrayList<>(); 
EventAdapter adapter; 
FloatingActionButton fab; 

public EventFragment() {} 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View rootView = inflater.inflate(R.layout.fragment_friend_event, container, false); 
    final RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.event_recycler_view); 
    fab = (FloatingActionButton) rootView.findViewById(R.id.floating_bar_event); 
    rv.setHasFixedSize(true); 
    LinearLayoutManager ll = new LinearLayoutManager(getActivity()); 
    rv.setLayoutManager(ll); 
    rv.setItemAnimator(new DefaultItemAnimator()); 
    adapter = new EventAdapter(event,this.getActivity()); 
    rv.setAdapter(adapter); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ((MainActivity) getActivity()).displayDialog(); 
     } 
    }); 
    return rootView; 
}} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

EditText event_name; 
EditText event_text; 
Button saveButton; 
RecyclerView rv; 
EventAdapter adapter; 
List<Event> event=new ArrayList<>(); 
String s; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
    getSupportActionBar().setHomeButtonEnabled(true); 
    Fragment fragmentEvent = new EventFragment(); 
    setTitle("Home"); 
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentEvent).commit(); 
} 

public void displayDialog() 
{ 
    Dialog dialog = new Dialog(this); 
    dialog.setTitle("Add Event"); 
    dialog.setContentView(R.layout.popup_events); 
    event_text = (EditText) findViewById(R.id.editText_msg); 
    event_name = (EditText) findViewById(R.id.editText_name); 
    rv = (RecyclerView) findViewById(R.id.event_recycler_view); 
    saveButton = (Button) dialog.findViewById(R.id.button_ok); 
    saveButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // save(event_name.getText().toString()); 
      s = event_name.getText().toString(); 
      event_name.setText(""); 
      adapter = new EventAdapter(EventData.getEventData(s),MainActivity.this); 
      Log.d("username", event_name.getText().toString()); 
      rv.setAdapter(adapter); 
     } 
    }); 
    dialog.show(); 
}} 

EventData.java

public class EventData { 
    public static List<Event> getEventData(String e) 
    { 
     List<Event> data = new ArrayList<>(); 
      Event item = new Event(); 
      item.setEventText(e); 
      data.add(item); 
     Log.d("method invoked", e); 
     return data; 
    } 
} 

EventAdapter.java

public class EventAdapter extends RecyclerView.Adapter<EventAdapter.EventViewHolder> { 

private List<Event> eventData; 
private LayoutInflater inflater; 

public EventAdapter(List<Event> eventData, Context context){ 
    inflater = LayoutInflater.from(context); 
    this.eventData = eventData; 
} 


@Override 
public EventViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.content_events, parent, false); 
    EventAdapter.EventViewHolder vh = new EventAdapter.EventViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(EventViewHolder holder, final int position) { 
    holder.eventTextView.setText(eventData.get(position).getEventText().toString()); 
    Log.i("CALL","Button adapter is invoked"); 
} 



@Override 
public int getItemCount() { 
    return eventData.size(); 
} 

public static class EventViewHolder extends RecyclerView.ViewHolder { 
    public CardView eventCardView; 
    public TextView eventTextView; 

    public EventViewHolder(View itemView) 
    { 
     super(itemView); 
     eventCardView = (CardView) itemView.findViewById(R.id.event_card_view); 
     eventTextView = (TextView) itemView.findViewById(R.id.event_text); 
    } 
} 

public void add(Event item,int position) 
{ 
    eventData.add(item); 
    notifyItemInserted(position); 
} 

public void remove(Event item) 
{ 
    int position = eventData.indexOf(item); 
    eventData.remove(position); 
    notifyItemRemoved(position); 
}} 

popup_event.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <View 
     android:layout_height="10dp" 
     android:layout_width="match_parent"></View> 
    <TextView 
     android:layout_height="30dp" 
     android:layout_width="match_parent" 
     android:text="Add Event" 
     android:textSize="25dp" 
     android:textAlignment="center" 
     /> 
    <View 
     android:layout_height="10dp" 
     android:layout_width="match_parent"></View> 
    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:text="Name:" 
      android:textSize="20dp" 
      android:id="@+id/textView_name" 
      android:layout_column="1"/> 
     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:id="@+id/editText_name" 
      android:layout_column="2"/> 
    </TableRow> 
    <View 
     android:layout_height="10dp" 
     android:layout_width="match_parent"></View> 
    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:text="Date:" 
      android:textSize="20dp" 
      android:id="@+id/textView_msg" 
      android:layout_column="1"/> 
     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:id="@+id/editText_msg" 
      android:layout_column="2"/> 
    </TableRow> 
    <View 
     android:layout_height="10dp" 
     android:layout_width="match_parent"></View> 
    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="OK" 
      android:id="@+id/button_ok" 
      android:layout_column="3" /> 
    </TableRow> 
</TableLayout> 

ответ

0

Простой способ: с помощью обработчика для отправки/получения Сообщ когда пользователь нажимает на кнопку Ok.

В вашей деятельности, которая принимала вид ресайклер

public static final int MSG_USER_INPUT = 0x01; 

public Handler mHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 

     switch (msg.what) { 
      case MSG_USER_INPUT: 
       String userInputStr = msg.obj.toString(); 
       // refine your data here, ex: mAdapter.setData(); 
       // remember to call notifyDataSetChanged() in adapter 
       break; 

      default: 
       // 
       break; 
     } 
    } 
}; 

Pass, этот обработчик для вашего всплывающего конструктору

Тогда в OnClick из Ok кнопки

Message message = new Message(); 
message.obj = mEdtText.getText().toString(); 
message.what = YourActivity.MSG_USER_INPUT; 

mHandler.sendMessage(message); 

Надежда это Помогите!

Дальше решение, imo, вы должны попробовать RxJava!