ورود

View Full Version : مشکل در دست یابی به EditText در DialogFragment



Accidentboy
دوشنبه 31 اردیبهشت 1397, 08:28 صبح
سلام

من یه 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)

Accidentboy
دوشنبه 31 اردیبهشت 1397, 08:29 صبح
خط 70 هموجایی که EditText رو مقدار میکنم

farhad_shiri_ex
دوشنبه 31 اردیبهشت 1397, 08:49 صبح
خط 70 هموجایی که EditText رو مقدار میکنم

شما که برنامه ای قرار ندید که حالا ما بدونیم که خط 70 چی هست؟؟؟؟
ولی ظاهرا به این اشاره داره که اون آبجکتی که متد onClick را براش فراخوانی کردید مقداری نداره Null هست.!

Accidentboy
دوشنبه 31 اردیبهشت 1397, 08:51 صبح
شما که برنامه ای قرار ندید که حالا ما بدونیم که خط 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());

}
});



}

farhad_shiri_ex
دوشنبه 31 اردیبهشت 1397, 09:18 صبح
باید تو کلاس viewHolder که تو متد onCreateViewHolder دارید ایجاد میکنید باید به این شی holder.itemView ویویی که می خواهید را Bind کنید یعنی اگر ویجت ویویی بر روی لایه xml تون هست با findviewByID بهش باید مقدار داده باشید که null نباشه.!

Accidentboy
دوشنبه 31 اردیبهشت 1397, 13:06 عصر
باید تو کلاس 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);
}

farhad_shiri_ex
دوشنبه 31 اردیبهشت 1397, 13:13 عصر
لطفا کد این کلاس که اینجا instance گرفتید بذارید new MyViewHolder(view) هرچی تو اون هست !یعنی همین کلاس MyViewHolder

Accidentboy
دوشنبه 31 اردیبهشت 1397, 14:02 عصر
این کلا کد 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();
}
}

farhad_shiri_ex
دوشنبه 31 اردیبهشت 1397, 14:16 عصر
این کد را تست کن!


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();
}
}

Accidentboy
سه شنبه 08 خرداد 1397, 07:39 صبح
این کد را تست کن!

}

نه بازم نشد ...
ولی یه تیکه کد پیدا کردم ولی نمیدونم چجوری پیاده سازی ش کنم





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;
}
}
}

farhad_shiri_ex
سه شنبه 08 خرداد 1397, 13:22 عصر
نه بازم نشد ...
طبق کدی که شما گذاشتید این ویو holder.parentView را در کلاس holder تعریف نکردده بودید ودر زمان اجرا خطای null میگرفتید که در کد اصلاحی در holder تعریف شد.!
خطایی که الان میده چی!؟