مشکل در دست یابی به EditText در DialogFragment
سلام
من یه CustomDialog دارم که یک EditText و یک RecyclerView داخلشه با یک Adaper که RecyclerView مقدار هی میکنه میخوام وقتی روش کلیک کنم مثلا در EditText مقدار دهی شه حالا هر کاری تو Adapter انجام میدم خطا میده
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.m.myapplication.Adaper.AdaperAgentList $1.onClick(AdaperList.java:70)
نقل قول: مشکل در دست یابی به EditText در DialogFragment
خط 70 هموجایی که EditText رو مقدار میکنم
نقل قول: مشکل در دست یابی به EditText در DialogFragment
نقل قول:
نوشته شده توسط
Accidentboy
خط 70 هموجایی که EditText رو مقدار میکنم
شما که برنامه ای قرار ندید که حالا ما بدونیم که خط 70 چی هست؟؟؟؟
ولی ظاهرا به این اشاره داره که اون آبجکتی که متد onClick را براش فراخوانی کردید مقداری نداره Null هست.!
نقل قول: مشکل در دست یابی به EditText در DialogFragment
نقل قول:
نوشته شده توسط
farhad_shiri_ex
شما که برنامه ای قرار ندید که حالا ما بدونیم که خط 70 چی هست؟؟؟؟
ولی ظاهرا به این اشاره داره که اون آبجکتی که متد onClick را براش فراخوانی کردید مقداری نداره Null هست.!
شرمنده
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
holder.agent_Code.setText( agentFiltered.get(position).getId());
holder.agent_Name.setText(agentFiltered.get(positi on).getUsername());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
G.agentCode =holder.agent_Code.getText().toString();
G.agentName = holder.agent_Name.getText().toString();
holder.searchAgent.setText(holder.agent_Name.getTe xt().toString());
}
});
}
نقل قول: مشکل در دست یابی به EditText در DialogFragment
باید تو کلاس viewHolder که تو متد onCreateViewHolder دارید ایجاد میکنید باید به این شی holder.itemView ویویی که می خواهید را Bind کنید یعنی اگر ویجت ویویی بر روی لایه xml تون هست با findviewByID بهش باید مقدار داده باشید که null نباشه.!
نقل قول: مشکل در دست یابی به EditText در DialogFragment
نقل قول:
نوشته شده توسط
farhad_shiri_ex
باید تو کلاس viewHolder که تو متد onCreateViewHolder دارید ایجاد میکنید باید به این شی holder.itemView ویویی که می خواهید را Bind کنید یعنی اگر ویجت ویویی بر روی لایه xml تون هست با findviewByID بهش باید مقدار داده باشید که null نباشه.!
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView agent_Name,agent_Code;
public EditText searchAgent;
public RecyclerView agentrecyclerView;
public MyViewHolder(View itemView) {
super(itemView);
agent_Name=(TextView) itemView.findViewById(R.id.agentname);
agent_Code=(TextView) itemView.findViewById(R.id.agentcode);
searchAgent=(EditText) itemView.findViewById(R.id.searchAgent);
agentrecyclerView=(RecyclerView) itemView.findViewById(R.id.agentrecyclerView);
}
}
ببخشید من اندروید وارد نیستم کدی که تو viewHolder نوشتم هستش .. چجوری باید Bind کنم ..
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.layo ut_agent_list,parent,false);
return new MyViewHolder(view);
}
نقل قول: مشکل در دست یابی به EditText در DialogFragment
لطفا کد این کلاس که اینجا instance گرفتید بذارید new MyViewHolder(view) هرچی تو اون هست !یعنی همین کلاس MyViewHolder
نقل قول: مشکل در دست یابی به EditText در DialogFragment
این کلا کد Adapter هستش
package com.example.m.myapplication.Adaper;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import android.widget.Toast;
import com.example.m.myapplication.G;
import com.example.m.myapplication.MainActivity;
import com.example.m.myapplication.R;
import com.example.m.myapplication.RegisterActivity;
import com.example.m.myapplication.model.User;
import com.example.m.myapplication.model.UsersAgent;
import java.util.ArrayList;
import java.util.List;
import static com.example.m.myapplication.G.agentCode;
import static com.example.m.myapplication.G.agentName;
/**
* Created by M on 05/18/2018.
*/
public class AdaperAgentList extends RecyclerView.Adapter<AdaperAgentList.MyViewHolder> {
private Context context;
private List<UsersAgent> agent;
private List<UsersAgent> agentFiltered;
public AdaperAgentList(Context context, List<UsersAgent> agent) {
this.context = context;
this.agent = agent;
this.agentFiltered=agent;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.layo ut_agent_list,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
holder.agent_Code.setText( agentFiltered.get(position).getId());
holder.agent_Name.setText(agentFiltered.get(positi on).getUsername());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
G.agentCode =holder.agent_Code.getText().toString();
G.agentName = holder.agent_Name.getText().toString();
holder.searchAgent.setText(holder.agent_Name.getTe xt().toString());
}
});
}
@Override
public int getItemCount() {
return agentFiltered.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView agent_Name,agent_Code;
public EditText searchAgent;
public RecyclerView agentrecyclerView;
public MyViewHolder(View itemView) {
super(itemView);
agent_Name=(TextView) itemView.findViewById(R.id.agentname);
agent_Code=(TextView) itemView.findViewById(R.id.agentcode);
searchAgent=(EditText) itemView.findViewById(R.id.searchAgent);
agentrecyclerView=(RecyclerView) itemView.findViewById(R.id.agentrecyclerView);
}
}
public void filter (String newText)
{
if (newText.isEmpty() || newText.equals("") || newText.length()==0){
agentFiltered=agent;
}else {
agentFiltered = new ArrayList<>();
for (UsersAgent usersAgent : agent) {
if (usersAgent.getUsername().toLowerCase().contains(n ewText) || usersAgent.getId().toLowerCase().contains(newText) ) {
agentFiltered.add(usersAgent);
}
}
}
notifyDataSetChanged();
}
}
نقل قول: مشکل در دست یابی به EditText در DialogFragment
این کد را تست کن!
package com.example.m.myapplication.Adaper;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import android.widget.Toast;
import com.example.m.myapplication.G;
import com.example.m.myapplication.MainActivity;
import com.example.m.myapplication.R;
import com.example.m.myapplication.RegisterActivity;
import com.example.m.myapplication.model.User;
import com.example.m.myapplication.model.UsersAgent;
import java.util.ArrayList;
import java.util.List;
import static com.example.m.myapplication.G.agentCode;
import static com.example.m.myapplication.G.agentName;
/**
* Created by M on 05/18/2018.
*/
public class AdaperAgentList extends RecyclerView.Adapter<AdaperAgentList.MyViewHolder> {
private Context context;
private List<UsersAgent> agent;
private List<UsersAgent> agentFiltered;
public AdaperAgentList(Context context, List<UsersAgent> agent) {
this.context = context;
this.agent = agent;
this.agentFiltered=agent;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.layo ut_agent_list,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
holder.agent_Code.setText( agentFiltered.get(position).getId());
holder.agent_Name.setText(agentFiltered.get(positi on).getUsername());
holder.parentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
G.agentCode =holder.agent_Code.getText().toString();
G.agentName = holder.agent_Name.getText().toString();
holder.searchAgent.setText(holder.agent_Name.getTe xt().toString());
}
});
}
@Override
public int getItemCount() {
return agentFiltered.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView agent_Name,agent_Code;
public EditText searchAgent;
public RecyclerView agentrecyclerView;
private View parentView;
public MyViewHolder(View itemView) {
super(itemView);
parentView = itemView ;
agent_Name=(TextView) itemView.findViewById(R.id.agentname);
agent_Code=(TextView) itemView.findViewById(R.id.agentcode);
searchAgent=(EditText) itemView.findViewById(R.id.searchAgent);
agentrecyclerView=(RecyclerView) itemView.findViewById(R.id.agentrecyclerView);
}
}
public void filter (String newText)
{
if (newText.isEmpty() || newText.equals("") || newText.length()==0){
agentFiltered=agent;
}else {
agentFiltered = new ArrayList<>();
for (UsersAgent usersAgent : agent) {
if (usersAgent.getUsername().toLowerCase().contains(n ewText) || usersAgent.getId().toLowerCase().contains(newText) ) {
agentFiltered.add(usersAgent);
}
}
}
notifyDataSetChanged();
}
}
نقل قول: مشکل در دست یابی به EditText در DialogFragment
نقل قول:
نوشته شده توسط
farhad_shiri_ex
نه بازم نشد ...
ولی یه تیکه کد پیدا کردم ولی نمیدونم چجوری پیاده سازی ش کنم
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class ViewHolder0 extends RecyclerView.ViewHolder {
...
public ViewHolder0(View itemView){
...
}
}
class ViewHolder2 extends RecyclerView.ViewHolder {
...
public ViewHolder2(View itemView){
...
}
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
return position % 2 * 2;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 2: return new ViewHolder2(...);
...
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case 0:
ViewHolder0 viewHolder0 = (ViewHolder0)holder;
...
break;
case 2:
ViewHolder2 viewHolder2 = (ViewHolder2)holder;
...
break;
}
}
}
نقل قول: مشکل در دست یابی به EditText در DialogFragment
طبق کدی که شما گذاشتید این ویو holder.parentView را در کلاس holder تعریف نکردده بودید ودر زمان اجرا خطای null میگرفتید که در کد اصلاحی در holder تعریف شد.!
خطایی که الان میده چی!؟