1

FragmentにはListViewがあります。このリストのある要素をクリックすると、Snackbarの中のクリックされた要素のタイトルを表示したいのですが、エラーが発生します。どうすれば解決できますか?Android - フラグメントから取り出した文字列を含むスナックバーを表示する方法

フラグメント方法:

mListViewSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     View rowView = view; 
     TextView tv = (TextView) rowView.findViewById(R.id.song_title); 
     Song selectedSong = (Song) mListViewSongs.getItemAtPosition(position); 
     String title = "▶ "+selectedSong.getSongName(); 
     mainActivity.setSelectedSong(title); 
    } 
}); 

Activity内部で使用方法:

public void setSelectedSong(String title) { 
    Snackbar snack = Snackbar.make(coordinatorLayout, title, Snackbar.LENGTH_SHORT); 
    View viewSnack = snack.getView(); 
    TextView txtv = (TextView) viewSnack.findViewById(android.support.design.R.id.snackbar_text); 
    txtv.setGravity(Gravity.CENTER_HORIZONTAL); 
    snack.show(); 
} 

プラス、私は中央にテキストを整列させるためのスナックバーの方法をテストしたが、それは動作しませんでした、どうして?

ログイン:

FATAL EXCEPTION: main 
Process: com.sebbsoft.app, PID: 2080 
Theme: themes:{} 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference 
at android.support.design.widget.Snackbar.<init>(Snackbar.java:183) 
at android.support.design.widget.Snackbar.make(Snackbar.java:215) 
at com.sebbsoft.app.PlayActivity.setSelectedSong(PlayActivity.java:354) 
at com.sebbsoft.app.Fragments.TracksListFragment$2.onItemClick(TracksListFragment.java:133) 
at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
at android.widget.AbsListView.performItemClick(AbsListView.java:1145) 
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066) 
at android.widget.AbsListView$3.run(AbsListView.java:3903) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5461) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

答えて

1

の代わりにあなたが直接の断片でSnackbarを表示することができ、アクティビティのメソッドを呼び出します。それは働いていた

Snackbar snack = Snackbar.make(android.R.id.content, title, Snackbar.LENGTH_SHORT); 
    View viewSnack = snack.getView(); 
    TextView txtv = (TextView) viewSnack.findViewById(android.support.design.R.id.snackbar_text); 
    txtv.setGravity(Gravity.CENTER_HORIZONTAL); 
    snack.show(); 
+0

、感謝 - あなたはSnackbarを表示したい場所 直接onItemClick()でこれを試してみてください。もう1つだけ:私は 'CENTER_HORIZONTAL'を 'Snackbar'の中に設定したいと思いますが、私のコードの中に書きましたが、うまくいきませんでした。どうすれば解決できますか? – Sabatino

関連する問題