Non posso capire questa eccezione del puntatore null
Domanda
Sto aggiungendo un listener onclick a un campo di testo nel mio adattatore.Voglio semplicemente il testo in quel campo a me pubblicato sulla mia casella di immissione del testo (EditText1).Sto provando il codice qui sotto tuttavia mi dà un'eccezione nullpoint alla linea Pointng a Edttext1.Aiuto per favore
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutInflater inflater2 = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater2.inflate(R.layout.activity_discuss, parent, false);
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(type==1 || type==3)
row = inflater.inflate(R.layout.listitem_discuss, parent, false);
else if(type==4 || type==5)
row = inflater.inflate(R.layout.listitem_users, parent, false);
else
row = inflater.inflate(R.layout.listitem_messages, parent, false);
}
//
final OneComment coment = getItem(position);
userComment = (TextView) row.findViewById(R.id.comment);
userImage = (ImageView) row.findViewById(R.id.place_img);
userName = (TextView) row.findViewById(R.id.place_name);
userOnlineImage = (ImageView) row.findViewById(R.id.pe_profile_pic);
commentDate = (TextView) row.findViewById(R.id.place_distance);
msgPic = (ImageView) row.findViewById(R.id.msgPic);
userComment.setText(coment.comment);
editText1 = (EditText) row.findViewById(R.id.cr_room_name);
userName.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
editText1.setText("testing");
Log.v("response","username selected");
// TODO Auto-generated method stub
}
});
.
Preferirei effettivamente renderlo loncabile.C'è una differenza nella configurazione.
Stack Trace
11-16 12:46:29.100: E/AndroidRuntime(8047): FATAL EXCEPTION: main
11-16 12:46:29.100: E/AndroidRuntime(8047): java.lang.NullPointerException
11-16 12:46:29.100: E/AndroidRuntime(8047): at com.peekatucorp.peekatu.DiscussArrayAdapter$1.onClick(DiscussArrayAdapter.java:129)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.view.View.performClick(View.java:4240)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.view.View$PerformClick.run(View.java:17721)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.os.Handler.handleCallback(Handler.java:730)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.os.Handler.dispatchMessage(Handler.java:92)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.os.Looper.loop(Looper.java:137)
11-16 12:46:29.100: E/AndroidRuntime(8047): at android.app.ActivityThread.main(ActivityThread.java:5103)
11-16 12:46:29.100: E/AndroidRuntime(8047): at java.lang.reflect.Method.invokeNative(Native Method)
11-16 12:46:29.100: E/AndroidRuntime(8047): at java.lang.reflect.Method.invoke(Method.java:525)
11-16 12:46:29.100: E/AndroidRuntime(8047): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-16 12:46:29.100: E/AndroidRuntime(8047): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-16 12:46:29.100: E/AndroidRuntime(8047): at dalvik.system.NativeStart.main(Native Method)
.
actvity_discuss.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/form"
android:layout_alignParentTop="true"
android:choiceMode="none"
android:divider="#00000000"
android:dividerHeight="@dimen/zerosize"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:listSelector="@android:color/transparent">
</ListView>
<RelativeLayout
android:id="@+id/form"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="@drawable/inputbg" >
<!-- <Button
android:id="@+id/postpic"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/attachbtn" /> -->
<!-- android:background="@drawable/sendbutton" -->
<EditText
android:id="@+id/cr_room_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/sendMessage"
android:layout_weight="3"
android:ems="10"
android:hint="Enter Message"
android:inputType="text" />
<ImageView
android:id="@+id/postpic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/picattach" />
<Button
android:id="@+id/sendMessage"
style="@style/SingleGradient"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
. Soluzione
Sembra che ci sia una piccola confusione: chiedi di trovare EditText1 sotto l'ID cr_room_name
: all'interno listitem_messages.xml
, ma è in questo momento all'interno Actvity_discuss.xml
.
Activity activity = (Activity) getContext();
editText1 = (EditText) activity.findViewById(R.id.cr_room_name);
.
Ma anche se funziona, è davvero un modo brutto per accoppiare una vista e un'attività, dovresti meglio a fare un modello di design oberabile dell'osservatore.
Altri suggerimenti
static class ViewHolder {
TextView textView;
TextView timeView;
ImageView imageView;
View divider;
ImageButton but;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
appPrefs = new AppPreferences(context.getApplicationContext());
final ViewHolder holder;
final UserModel s = (UserModel) values.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_user_item, parent, false);
holder.textView = (TextView) convertView.findViewById(R.id.label);
holder.timeView = (TextView) convertView.findViewById(R.id.list_time);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
holder.divider = (View) convertView.findViewById(R.id.side_divider);
holder.but = (ImageButton) convertView.findViewById(R.id.details_list_button);
convertView.setTag(holder);
}
else
{holder = (ViewHolder) convertView.getTag();}
holder.timeView.setText(s.getTimePosted());
holder.textView.setText(s.getTitle());
return convertView;
}
.
Ecco un esempio di una visione di lavoro per te per guardare oltre
Without logcat information it will be harder to tell but i am just guessing, can you make sure cr_room_name is actually in the activity_discuss.xml file. If it is in the activity_discuss layout file, then only after seeing the logcat we can figure out what might be the problem.
After seeing you stacktrace there is only one thing coming to my mind. Please make sure all of those view id's are in it's respective layout file.
As i can see from your layout and code, there is no place_name textview in your Actvity_discuss.xml file.
Since you are using different layout for different purposes make sure you do some null checking before actually referencing the view from getView and specially when you are setting a listener for a particular view.
Nullpoint is an easy problem to solve, sometimes because an object is not initialized, and you should debug to find out why. Many times the object is null, causing problems