2017-10-10 1 views
-2

해시 태그를 사용할 응용 프로그램을 만들고 있습니다. 지금까지 나는 AutoLinkTextClick을 사용하고 있습니다! 그리고 모든 사람이 오류가 확인 된 해시 태그에 응용 프로그램 충돌을 클릭 할 때를 제외하고 잘 작동 :도우미 클래스 (어댑터)에서 시작 의도가 java.lang.NullPointerException을 반환합니다 :

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

그래서 나는 그것을 일으키는 사람들이 getContext() 또는 getActvity()를 사용하는 것이 좋습니다하지만 둘 수 있습니다 것에 대해 거의 모든 StackOverflow에 걸쳐 읽고 나는 그 의도를 어댑터에서 시작하려고 노력하고 있기 때문에 작동하지 않습니다 또는 클래스에서 활동 또는 조각, 그래서 아주 잘 당신의 도움을 주셔서 감사하겠습니다.

이 문제에 대한 귀하의 도움과 협조에 진심으로 감사드립니다. 아래에 표시되는 어댑터와 오류에 대한 내 코드 :

package com.android.msahakyan.expandablenavigationdrawer.adapter; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.support.v7.app.AlertDialog; 

import com.android.msahakyan.expandablenavigationdrawer.AboutUsActivity; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import com.android.msahakyan.expandablenavigationdrawer.R; 
import com.android.msahakyan.expandablenavigationdrawer.activity.FeedImageView; 
import com.android.msahakyan.expandablenavigationdrawer.model.Feed; 
import com.android.msahakyan.expandablenavigationdrawer.others.AppController; 
import com.luseen.autolinklibrary.AutoLinkMode; 
import com.luseen.autolinklibrary.AutoLinkOnClickListener; 
import com.luseen.autolinklibrary.AutoLinkTextView; 

import java.util.List; 

public class FeedsListAdapter extends  RecyclerView.Adapter<FeedsListAdapter.MyHolder> { 
private Activity activity; 
private LayoutInflater inflater; 
private List<Feed> feedItems; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
//ImageLoader imageLoader = VolleySingleton.getInstance(context).getImageLoader() 
public FragmentManager f_manager; 



public FeedsListAdapter(Activity activity, List<Feed> feedItems) { 
    this.activity = activity; 
    this.feedItems = feedItems; 
} 


//INITIALIE VH 
//@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.feeds_home_row,parent,false); 
    MyHolder holder=new MyHolder(v); 
    return holder; 
} 

//BIND DATA 
// @Override 
public void onBindViewHolder(MyHolder holder, int position) { 

    //ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 

    final Feed f = feedItems.get(position); 

    //Post images 
    holder.picture.setImageUrl(f.getPictureUrl(), imageLoader); // displays company profile image on post 
    holder.sms_image.setImageUrl(f.getMessagePictureUrl(), imageLoader); // displays post image on post 

    //autoLinkTextView.enableUnderLine(); 
    holder.messages.addAutoLinkMode(AutoLinkMode.MODE_HASHTAG); 
holder.messages.setAutoLinkText("this the sample message #test i need to test hashtag onClink and launch intent"); // 
    holder.messages.setAutoLinkOnClickListener(new AutoLinkOnClickListener() { 
     @Override 
     public void onAutoLinkTextClick(AutoLinkMode autoLinkMode, String matchedText) { 
      Intent intent = new Intent(activity, AboutUsActivity.class); 
      intent.putExtra("companyId", f.getCompanyId()); 
      activity.startActivity(intent); 
     } 
    }); 
    //holder.messages.setText(f.getMessage()); 
    //Linkify.addLinks(holder.messages, Linkify.ALL); //detect link that are in a message 
    holder.date_created.setText(f.getDateCreated()); 
    holder.company.setText(f.getCompany()); 

} 


/* 
TOTAL ITEMS 
*/ 

//@Override 
public int getItemCount() { 
    return feedItems.size(); 

} 

/* 
ADD DATA TO ADAPTER 
*/ 
public void add(Feed s) { 
    feedItems.add(s); 
    notifyDataSetChanged(); 
} 

/* 
CLEAR DATA FROM ADAPTER 
*/ 
public void clear() { 
    feedItems.clear(); 
    notifyDataSetChanged(); 
} 

/* 
VIEW HOLDER CLASS 
*/ 
class MyHolder extends RecyclerView.ViewHolder { 

    FeedImageView sms_image; 
    NetworkImageView picture; 
    //TextView messages; 
    AutoLinkTextView messages; 
    //AutoLinkTextView autoLinkTextView; 
    TextView date_created; 
    TextView company; 


    public MyHolder(View convertView) { 
     super(convertView); 


     this.sms_image = (FeedImageView) convertView.findViewById(R.id.sms_image); 
     NetworkImageView thumbnail = (NetworkImageView) convertView.findViewById(R.id.thumbnail); 
     this.picture = (NetworkImageView) convertView.findViewById(R.id.picture); 
     //this.messages = (TextView) convertView.findViewById(R.id.messages); 
     this.messages = (AutoLinkTextView) convertView.findViewById(R.id.messages); 
     this.date_created = (TextView) convertView.findViewById(R.id.date_created); 
     this.company = (TextView) convertView.findViewById(R.id.company); 
     //TextView status = (TextView) convertView.findViewById(R.id.status); 


    } 

} 

} 

오류 표시되어있는 당신은 RecyclerView 어댑터에서 활동을 시작하지 말아야

10-10 08:08:06.128 28368-28368/com.android.msahakyan.expandablenavigationdrawer E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.android.msahakyan.expandablenavigationdrawer, PID: 28368 
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
     at android.content.ComponentName.<init>(ComponentName.java:128) 
     at android.content.Intent.<init>(Intent.java:4666) 
     at com.android.msahakyan.expandablenavigationdrawer.adapter.FeedsListAdapter$1.onAutoLinkTextClick(FeedsListAdapter.java:87) 
     at com.luseen.autolinklibrary.AutoLinkTextView$1.onClick(AutoLinkTextView.java:77) 
     at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:217) 
     at com.luseen.autolinklibrary.LinkTouchMovementMethod.onTouchEvent(LinkTouchMovementMethod.java:38) 
     at android.widget.TextView.onTouchEvent(TextView.java:8689) 
     at android.view.View.dispatchTouchEvent(View.java:9787) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2686) 
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2335) 
     at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461) 
     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1780) 
     at android.app.Activity.dispatchTouchEvent(Activity.java:2853) 
     at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) 
     at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422) 
     at android.view.View.dispatchPointerEvent(View.java:10018) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4738) 
     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4596) 
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4101) 
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4154) 
     at android.view 
+0

가 어떻게 활동 목록과 활동 PARAMS를 추가 :

public class FeedsListAdapter extends RecyclerView.Adapter<FeedsListAdapter.ViewHolder> { // ... /***** Creating OnItemClickListener *****/ // Define listener member variable private OnItemClickListener listener; // Define the listener interface public interface OnItemClickListener { void onAutoLinkTextClick(String companyId); } // Define the method that allows the parent activity or fragment to define the listener public void setOnItemClickListener(OnItemClickListener listener) { this.listener = listener; } public void onBindViewHolder(MyHolder holder, int position) { ... holder.messages.setAutoLinkOnClickListener(new AutoLinkOnClickListener() { @Override public void onAutoLinkTextClick(AutoLinkMode autoLinkMode, String matchedText) { listener.onAutoLinkTextClick(f.getCompanyId()); } }); ... } } 

이 그런 다음 활동이나 조각에 리스너를 설정? 당신의 활동도 보여줄 수 있습니까? –

+0

장소 코드 추가 방법 활동 참조를 어댑터에 전달하는 방법 –

답변

2

이다. 대신, 어댑터가있는 Activity/Fragment가 구현해야하는 리스너를 작성해야합니다. 어댑터는 그 작업을 수행해야합니다. 어댑터의 내용을 보여줍니다. 이 같은

뭔가 :

FeedsListAdapter adapter = ...; 
adapter.setOnItemClickListener(new ContactsAdapter.OnItemClickListener() { 
    @Override 
    public void onAutoLinkTextClick(String companyId) { 
     Intent intent = new Intent(activity, AboutUsActivity.class); 
     intent.putExtra("companyId", f.getCompanyId()); 
     activity.startActivity(intent); 
    } 
}); 
+0

downvoter의 경우 downvote에 대한 이유를 설명해 주시겠습니까? –

+0

당신의 제안은 옳았습니다. 지구상의 누구가 이것을 낙심 시켰는지 모르겠습니다. 그리고 그 이유를 설명하지 않았다. –

+0

@AbdulWaheed : 나는 히트 앤드 러너 다운 보더의 희생자 인 것 같다. 격려하여 주셔서 감사합니다;) –

관련 문제