2016-10-26 8 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()); 

テキストの代わりにリンク全体を表示しても問題ありません。ご理解頂けるとありがたいです。

私が取得しようとしているが、エラー

enter image description here

を取得していますどのようなイメージを確認してくださいエラー

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 

下になっボタンに

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


     } 


    } 

} 

をのTextViewを変更した後、私の完全なコードを参照してください。

+0

'getDataAdapter1.getImageUrlName()'のサンプル出力は何ですか?それは 'text'か' 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

小さな修正そのコンテキスト。開始アクティビティ(インテント);私の考えではありません。その提案された。働く火格子。すべて –

+0

ありがとう、私は –

+0

を編集します。戻るボタンをクリックするとアプリケーションから終了します。以前の活動に戻る方法。 finish();エラーを示しています。 –

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

// EDIT:

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)のWebView 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

が機能しません。私のコードを参照してくださいボタンにテキストビューを変更してください。 –

+0

編集を参照してください。 TextView自体でも動作させることができます。 –

+0

ok私はjsonからURLを取得してImageUrlNameView文字列に設定しています。今私はImageUrlNameViewを使用する=(ボタン)itemView.findViewById(R.id.bAppUrl);そのテキストをURLで置き換えます。その罰金だが、私はURLを表示したくない。インストール文字列をクリックすると、URLに移動する必要があります。あなたは火事の仕事をした。しかし、私はスクリプトを変更することはできません、私はアンドロイド –

関連する問題