从活动中更改片段textview

时间:2014-08-04 16:30:37

标签: android android-fragments

我想从活动(而不是片段类)更改片段textview。我该怎么办?我正在使用此代码:

public void startChat() {
    FrameLayout layout = (FrameLayout)findViewById(R.id.container);
    layout.setVisibility(View.VISIBLE); 
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.container, new ConversationFragment());
    fragmentTransaction.commit();
    viewPager.setVisibility(View.GONE);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayHomeAsUpEnabled(true);
    TextView nameView=(TextView)findViewById(R.id.user_name);
    nameView.setText("asd");
}

此代码加载conversation_fragment.xml并希望更改textview,但我的应用程序崩溃了。

这里是conversation_fragment.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"
    android:orientation="vertical"
    android:background="#878787" >

        <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="dfgdfgdf"
        android:textSize="20dp"
        android:layout_centerInParent="true"
        android:id="@+id/user_name"/>

    <EditText
    android:id="@+id/message"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
   />

    <Button 
        android:text="Gönder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="getFromUser"
        android:layout_marginTop="40dp"
        />

</RelativeLayout>

2 个答案:

答案 0 :(得分:3)

您可以使用findFragmentById查找您的片段,并调用更改文字的公共方法

(ConversationFragment) getFragmentManager().findFragmentById(R.id.yourid);

或在创建类之前保留该类的实例,然后再将其添加到片段管理器

conv = new ConversationFragment()
fragmentTransaction.add(R.id.container, conv);

然后使用conv或任何你称之为

的方法调用公共方法

修改

使用捆绑包将数据发送到片段

Bundle b = new Bundle()
b.putString("text",data)
conv.setArguments(b);

然后在你的片段中获取getArguments()的参数并从包中提取数据然后根据需要使用

答案 1 :(得分:1)

你可以这样做

public class ConversationFragment extends Fragment {

    private TextView nameView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.conversation_fragment, null);
        nameView = (TextView) view.findViewById(R.id.user_name);
    }

    public void setText(String yourText){
        nameView.setText(yourText); 
    }
}

并在您的活动调用方法 setText()

ConversationFragment conv = new ConversationFragment();
conv.setText("asd");

最诚挚的问候。