2016-10-26 5 views
1

JSON에서 데이터를 가져 와서 RecyclerView 레이아웃에 표시하고 있습니다. 내 텍스트보기에 전체 링크가 표시됩니다. 예를 들어 내 TextView가 설치되어 있고 링크는 http://mydomin.com?id=2054656입니다. RecyclerView에서는 install 텍스트 만 표시되고 클릭하면 URL로 이동해야합니다. 나는 아래 코드를 시도했다.RecyclerView의 하이퍼 링크 textview

Viewholder.ImageUrlNameView.setText(getDataAdapter1.getImageUrlName()); 

ImageUrlNameView = (TextView) itemView.findViewById(tvAppLink) ; 

ImageUrlNameView.setMovementMethod(LinkMovementMethod.getInstance()); 

텍스트가 아니라 전체 링크가 표시됩니다. 난 당신이 이해 바랍니다.

오류 아래 점점 버튼

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.v7.widget.RecyclerView; 
import android.text.Html; 
import android.text.method.LinkMovementMethod; 
import android.text.util.Linkify; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 

import java.util.List; 

import static android.icu.lang.UCharacter.GraphemeClusterBreak.V; 



public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 

    Context context; 

    List<GetDataAdapter> getDataAdapter; 

    ImageLoader imageLoader1; 

    public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){ 

     super(); 
     this.getDataAdapter = getDataAdapter; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false); 

     ViewHolder viewHolder = new ViewHolder(v); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder Viewholder, int position) { 

     GetDataAdapter getDataAdapter1 = getDataAdapter.get(position); 

     imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader(); 

     imageLoader1.get(getDataAdapter1.getImageServerUrl(), 
       ImageLoader.getImageListener(
         Viewholder.networkImageView,//Server Image 
         R.mipmap.ic_launcher,//Before loading server image the default showing image. 
         android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server. 
       ) 
     ); 

     Viewholder.networkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1); 

     Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName()); 

     Viewholder.ImageUrlNameView.setText(getDataAdapter1.getImageUrlName()); 

    } 

    @Override 
    public int getItemCount() { 

     return getDataAdapter.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder{ 

     public NetworkImageView networkImageView ; 
     public TextView ImageTitleNameView; 
     public Button ImageUrlNameView ; 

     public ViewHolder(View itemView) { 

      super(itemView); 

      networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ; 
      ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item); 
      //ImageUrlNameView = (Button) itemView.findViewById(R.id.bAppUrl) ; 
      //ImageUrlNameView.setMovementMethod(LinkMovementMethod.getInstance()); 
      //Linkify.addLinks(ImageUrlNameView, Linkify.WEB_URLS); 

      itemView.findViewById(R.id.bAppUrl).setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        String url = "ImageUrlNameView"; 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); 
        startActivity(intent); 
       } 
      }); 


     } 


    } 

} 

에 텍스트 뷰를 변경 한 후 내 전체 코드를 참조하십시오

10-27 20:58:43.896 12462-12462/com.android_examples.recyclerviewimagelistview_android_examplescom E/AndroidRuntime: FATAL EXCEPTION: main 
                                java.lang.NullPointerException 
                                 at com.android_examples.recyclerviewimagelistview_android_examplescom.RecyclerViewAdapter.onBindViewHolder(RecyclerViewAdapter.java:73) 
                                 at com.android_examples.recyclerviewimagelistview_android_examplescom.RecyclerViewAdapter.onBindViewHolder(RecyclerViewAdapter.java:29) 
                                 at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5768) 
                                 at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5801) 
                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5037) 
                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913) 
                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029) 
                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414) 
                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377) 
                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578) 
                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260) 
                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3069) 
                                 at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3518) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                                 at android.view.View.layout(View.java:14008) 
                                 at android.view.ViewGroup.layout(ViewGroup.java:4373) 
                                 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892) 
                                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711) 
                                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
                                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
                                 at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
                                 at android.view.Choreographer.doFrame(Choreographer.java:532) 
                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
                                 at android.os.Handler.handleCallback(Handler.java:725) 
                                 at android.os.Handler.dispatchMessage(Handler.java:92) 
                                 at android.os.Looper.loop(Looper.java:137) 
                                 at android.app.ActivityThread.main(ActivityThread.java:5041) 
                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                 at java.lang.reflect.Method.invoke(Method.java:511) 
                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
                                 at dalvik.system.NativeStart.main(Native Method) 
10-27 21:03:43.956 12462-12462/? I/Process: Sending signal. PID: 12462 SIG: 9 

내가 오류

enter image description here

을 얻으려고 노력하지만 무엇입니까 어떤 이미지를 확인하시기 바랍니다
+0

'getDataAdapter1.getImageUrlName()'의 샘플 출력은 무엇인가? '텍스트'또는'URL'인가. 그것이 무엇이든, 당신의 코드에 따라'ImageUrlNameView'로 설정 될 것입니다. –

+0

의 URL을 데이터베이스에서 가져옵니다. 그것의 전체 링크를 표시, 나는 단지 텍스트를 보여주고 싶다. 클릭하면 URL 페이지 –

+0

으로 이동합니다. http://stackoverflow.com/a/14517468/3758972처럼해야합니다.HTML을 사용하여 –

답변

1

변경 onBindViewHolder에 클릭의 논리 이러한 방법으로, 당신은 현재 객체의 URL이 있습니다

@Override 
     public void onBindViewHolder(ViewHolder Viewholder, int position) { 

      GetDataAdapter getDataAdapter1 = getDataAdapter.get(position); 

      imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader(); 

      imageLoader1.get(getDataAdapter1.getImageServerUrl(), 
        ImageLoader.getImageListener(
          Viewholder.networkImageView,//Server Image 
          R.mipmap.ic_launcher,//Before loading server image the default showing image. 
          android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server. 
        ) 
      ); 

      Viewholder.networkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1); 

      Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName()); 

      Viewholder.ImageUrlNameView.setText("Install"); 



Viewholder.ImageUrlNameView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         String url = getDataAdapter1.getImageUrlName(); 

         Intent intent = new Intent(Intent.ACTION_VIEW); 
         intent.setData(Uri.parse(url)); 
         context.startActivity(intent); 
        } 
       }); 

     } 

     @Override 
     public int getItemCount() { 

      return getDataAdapter.size(); 
     } 

     class ViewHolder extends RecyclerView.ViewHolder{ 

      public NetworkImageView networkImageView ; 
      public TextView ImageTitleNameView; 
      public Button ImageUrlNameView ; 

      public ViewHolder(View itemView) { 

       super(itemView); 

       networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ; 
       ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item); 
       ImageUrlNameView = (Button) itemView.findViewById(R.id.bAppUrl) ; 
       //ImageUrlNameView.setMovementMethod(LinkMovementMethod.getInstance()); 
       //Linkify.addLinks(ImageUrlNameView, Linkify.WEB_URLS); 




      } 


     } 
+0

작은 수정 내용 context.startActivity (intent); 내 생각이 아니야. 그 제안. 창살. 모두에게 감사합니다 –

+0

아, 예, 내가 버튼을 클릭하면 앱에서 나가는 것을 클릭하면 –

+0

을 편집합니다. 이전 활동으로 돌아갈 방법. 끝(); 오류를 표시합니다. –

0

방법 1 : 나를 위해 일한이 시도 - 1) String installString = "install"; 문자열 hyperlinkString = "무엇이든 문자열"+ installString + "text"; SpannableString hyperlinkText = makeHyperlinkText (hyperlinkString, installString); textView.setText (hyperlinkText); textView.setMovementMethod (LinkMovementMethod.getInstance());

2) 함수는 여기에 있습니다 :

private SpannableString makeHyperlinkText(String hyperlinkString, String textToMakeHyperlink) { 
     SpannableString content = new SpannableString(hyperlinkString); 
     ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       Intent webviewIntent = new Intent(YourCurrentActivity.this, WebviewActivity.class); 
       webviewIntent.putExtra("URL", your_url_here); //EDIT 
       startActivity(webviewIntent); 
       } 
      }; 
      int startIndex = hyperlinkString.indexOf(textToMakeHyperlink); 
      int endIndex = startIndex + textToMakeHyperlink.length(); 
      content.setSpan(clickableSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      return content; 
    } 

// 편집 :

3) WebviewActivity 클래스는 여기

아래에 이러한 파일을 추가 -

public class WebviewActivity extends AppCompactActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_webview_layout); 

     String url = getIntent().getStringExtra("URL"); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     WebView myWebView = (WebView) findViewById(R.id.webview); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     myWebView.loadUrl(url); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

4) 웹보기 Layour 클래스 (필요에 따라 맞춤 설정) :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.massmutual.css.ui.loan.LoanDisclosureWebView"> 

    <WebView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</RelativeLayout> 

방법 2 : URL 문자열을 전달하는 방법을 변경할 수 있습니다. HTML 형식이어야합니다. 예는 : 알려줘

String url = "http://mydomin.com?id=2054656"; 
    String text = "install"; 
    String hyperlinkText = "<a href=\"" + url + "\""> + text + "</a>"; 

만약 당신이 이러한 작업 :

<a href="www.google.com">Click here for google.</a> 

그래서 난 당신의 텍스트처럼 뭔가있을 거라고 생각.

+0

이 작동하지 않습니다. 내 코드를 참조하십시오 button to textview 변경하십시오. –

+0

수정 사항을 참조하십시오. TextView 자체에서 작동하도록 할 수 있습니다. –

+0

확인 json에서 URL을 받고 ImageUrlNameView 문자열을 설정합니다. 지금 ImageUrlNameView 사용할 때 = (Button) itemView.findViewById (R.id.bAppUrl); 그 텍스트를 URL로 대체. 그것의 벌금 그러나 나는 URL을 보여주고 싶지 않다. 설치 문자열을 클릭하면 URL로 이동해야합니다. 당신은 화를 냈어. 그러나 나는 스크립트를 변경할 수 없다. 나는 안드로이드 –