2014-10-27 3 views
0

Делаю на заказ тост, поэтому У меня есть XML-файл для размещения пользовательского тоста имени ctoast_view.xmlКак создать собственный тост

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
     
 
    android:layout_width="wrap_content" 
 
    android:layout_height="wrap_content" 
 
    android:orientation="horizontal" > 
 
    
 
    <ImageView 
 
     android:id="@+id/imageView1" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:src="@android:drawable/checkbox_on_background" /> 
 
    <TextView 
 
     android:id="@+id/textView1" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="" /> 
 

 

 

 
</LinearLayout>

файл main.xml

<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" > 
 
    
 
    <Button 
 
     android:id="@+id/button1" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:layout_alignParentTop="true" 
 
     android:layout_centerHorizontal="true" 
 
     android:layout_marginTop="133dp" 
 
     android:text="Button" /> 
 
    
 

 
</RelativeLayout> 
 

и главный класс CToast

package com.example.customtoast; 
 

 

 

 
import android.app.Activity; 
 
import android.content.Context; 
 
import android.os.Bundle; 
 
import android.util.Log; 
 
import android.view.Gravity; 
 
import android.view.View; 
 
import android.view.View.OnClickListener; 
 
import android.widget.Button; 
 
import android.widget.LinearLayout; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 

 
public class CToast extends Activity{ 
 

 

 
\t private Context mContext; 
 
\t private Button mButton; 
 
\t private LinearLayout cToastView; 
 
\t private TextView toastTextView; 
 

 
\t @Override 
 
\t protected void onCreate(Bundle savedInstanceState) { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t super.onCreate(savedInstanceState); 
 

 

 
\t \t setContentView(R.layout.main); 
 

 
\t \t mContext = this; 
 

 
\t \t toastTextView = (TextView) findViewById(R.id.textView1); 
 
\t \t mButton = (Button) findViewById(R.id.button1); 
 

 

 

 

 

 
\t \t mButton.setOnClickListener(new OnClickListener() { 
 

 
\t \t \t @Override 
 
\t \t \t public void onClick(View v) { 
 
\t \t \t \t // TODO Auto-generated method stub 
 

 
\t \t \t \t showToast(); 
 
\t \t \t } 
 

 

 
\t \t }); 
 

 

 

 
\t } 
 

 

 
\t private void showToast() { 
 
\t \t // TODO Auto-generated method stub 
 

 

 
\t \t Toast mToast = new Toast(getApplicationContext()); 
 
\t \t mToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
 
\t \t toastTextView.setText("message!!"); 
 
\t \t mToast.setView(getLayoutInflater().inflate(R.layout.ctoast_view,null)); 
 
\t \t mToast.setDuration(Toast.LENGTH_LONG); 
 
\t \t mToast.show(); 
 

 

 

 
\t } 
 

 

 
}

Теперь я получил NullPointerException на этой линии

toastTextView.setText("message!!");

Я думаю, потому что я не могу ссылку на Просмотр в другом файле макета, заданном setContentView. Как я могу динамически установить текст моего пользовательского макета тоста?

ответ

2

Вы должны сделать это таким образом:

private void showToast() { 
    View view = getLayoutInflater().inflate(R.layout.ctoast_view,null); 
    toastTextView = (TextView) view.findViewById(R.id.textView1); 
    toastTextView.setText("message!!"); 

    Toast mToast = new Toast(getApplicationContext()); 
    mToast.setView(view); 
    mToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
    mToast.setDuration(Toast.LENGTH_LONG); 
    mToast.show(); 
} 

Накачайте вид контента тосты и получить TextView от него при создании тостов.

Смежные вопросы