2017-12-04 9 views
0

그래서 이미지와 버튼이있는 간단한 프로그램이 있습니다. 버튼을 클릭하면 웹 링크가있는 경고 대화 상자가 열립니다.두 번째 레이아웃에서 웹 링크를 사용할 수 없습니다.

내 문제는 응용 프로그램을 손상시키지 않고 작동하도록 웹 링크를 얻는 것입니다 (null 객체 참조 오류가 발생 함).

Layoutinflaters 및 Fragments를 살펴 봤지만 원하는대로 프로그램을 만들 수없는 것으로 보입니다.

package com.test.test; 

public class MainActivity extends AppCompatActivity { 

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

    ImageView mShowDialog = findViewById(R.id.btnShowDialog); 
    mShowDialog.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this); 
      View mView = getLayoutInflater().inflate(R.layout.info_popup, null); 

      mBuilder.setView(mView); 
      AlertDialog dialog = mBuilder.create(); 
      dialog.show(); 

      //link is null 
      TextView link = findViewById(R.id.linkText); 
      //Crashes the app before it starts 
      link.setMovementMethod(LinkMovementMethod.getInstance()); 
     } 
    }); 
} 
} 

나는이 오류가이 코드에 기인한다고 생각하지만 요청시 XML 파일을 제공 할 것입니다.

도움을 주시면 감사하겠습니다.

답변

0

그래서이 코드를 두 가지 활동으로 나누어 해결했습니다. 주요 활동 및 단편 활동.

주요 활동 :

public class MainActivity extends AppCompatActivity { 

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

    setupPopup(); 

} 

private void setupPopup() { 

    ImageView btn = findViewById(R.id.btnShowDialog); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentManager manager = getSupportFragmentManager(); 
      PopupFragment dialog = new PopupFragment(); 
      dialog.show(manager, "MessageDialog"); 
     } 
    }); 

} 

} 

조각 활동 :

public class PopupFragment extends AppCompatDialogFragment { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    View v = LayoutInflater.from(getActivity()) 
      .inflate(R.layout.info_popup, null); 

    final TextView link = v.findViewById(R.id.linkText); 
    link.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      link.setMovementMethod(LinkMovementMethod.getInstance()); 
     } 
    }); 

    return new AlertDialog.Builder(getActivity()) 
      .setView(v) 
      .create(); 
} 
} 

가 더 나은 방법이있을 수 있습니다,하지만이 날 위해 일했습니다.

0

더 나은 옵션은 XML로 링크하는 것입니다. 코드에서 설정하는 것처럼 보이지 않으므로 위의 내용은 모두 필요하지 않습니다. 다음은 그 예입니다.

<TextView 
       android:id="@+id/lnkHelpInfo" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:gravity="center" 
       android:layout_marginTop="25dp" 
       android:linksClickable="true" 
       android:layout_marginStart="10dp" 
       android:layout_marginEnd="10dp" 
       android:autoLink="web" 
       android:text="https://www.google.com"/> 

당신이 다음 정말 당신에게 어떤 가치를 제공하지 않는 linkmethod를 사용하여 텍스트가 다른 뭔가를 보여주고 싶은 때문에 코드에서이 작업을 수행하는 것을 선호합니다. 텍스트에 밑줄과 파란색을 만드십시오. 그런 다음 코드를 처리하십시오.

Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); 
startActivity(myIntent); 
+0

그건 원래 가지고 있었지만 어떤 텍스트에서 링크를 만들지 못했습니다. 'https://www.google.com'을 클릭하는 대신 'Google로 이동'링크를 클릭하는 것이 좋습니다. 이유가 있습니다. –

관련 문제