Johan
Johan

Reputation: 35213

Updating a textview in different layout xml from the main activity

I've created a new .xml file in my layout folder called log.xml. It only contains one TextView.

Is it possible to set the text on the textview located in the log.xml from my main activity? Or can it only be set when in an activity which uses the log.xml as view? Hope you get what i mean here, otherwise ill elaborate.

Thanks

Upvotes: 5

Views: 15283

Answers (4)

Chandra Mani Singh
Chandra Mani Singh

Reputation: 1

Below solution worked for me -

  1. Get View object of layout XML file (ex. toast_loading_data) -

    View layout = inflater.inflate(R.layout.toast_loading_data,
            (ViewGroup) findViewById(R.id.toast_layout_root));
    
  2. Get the TextView element from this View (ex. TextView id - toast_text)-

    TextView tvToast = (TextView) layout.findViewById(R.id.toast_text);
    
  3. Set text of the TextView -

    tvToast.setText("Loading data for " + strDate + " ...");
    
  4. Below is snippet for customized Toast message from Main Activity -

    View layout = inflater.inflate(R.layout.toast_loading_data,
            (ViewGroup) findViewById(R.id.toast_layout_root));
    TextView tvToast = (TextView) layout.findViewById(R.id.toast_text);
    tvToast.setText("Loading data for " + strDate + " ...");
    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER, 0, 0); //Set toast gravity to bottom
    toast.setDuration(Toast.LENGTH_LONG);   //Set toast duration
    toast.setView(layout);  //Set the custom layout to Toast
    

Hope this helps

Upvotes: 0

Sam
Sam

Reputation: 86948

Unless log.xml is included in the current, visible layout findViewById() will return null.

Since you want to set the TextView's text when you load it in a new activity, you can pass the new String in the Intent used to start your Activity.

In the appropriate onClick() from your First Activity:

Intent intent = new Intent(this, Second.class);
intent.putExtra("myTextViewString", textString);
startActivity(intent);

In your Second Activity's onCreate():

setContentView(R.layout.log);

TextView textView = (TextView) findViewById(R.id.textView);
Bundle extras = getIntent().getExtras();
if(extras != null) {
    String newText = extras.getString("myTextViewString");
    if(newText != null) {
        textView.setText(newText);
    }
}

Upvotes: 0

eaglzfn37
eaglzfn37

Reputation: 56

I think I understand what you are trying to say. If you do this:

TextView tv = (TextView) findViewById(R.id.textView2);    
tv.setText(output);

where textView2 is the id of the text view that you want to set the text of, you can set it to any string value using the setText() function. Hope this helps!

Upvotes: -1

Nuno Gonçalves
Nuno Gonçalves

Reputation: 6805

If you don't set the xml you are talking about on "setContentView()" you can always get it with layout inflater. You'll have to add the tv to the current layout using addView() though.

LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View vi = inflater.inflate(R.layout.log, null); //log.xml is your file.
TextView tv = (TextView)vi.findViewById(R.id.tv); //get a reference to the textview on the log.xml file. 

Upvotes: 11

Related Questions