2014-07-02 61 views
1

我是android開發人員的新手,我目前在這種情況下難住。改變片段中的素材視圖

有沒有辦法改變片段的特定子視圖?

例如,我在一個片段中有一個TextView和Button。現在膨脹這個片段並提交後,我只想根據用戶輸入更改TextView的文本。

編輯:相同的佈局用於創建多個片段。我想只更改特定片段的TextView。

MainActivity代碼:

public class MainActivity extends Activity { 

Button bt; 
EditText et; 
LinearLayout ly; 
String m; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bt=(Button) findViewById(R.id.badd); 
    ly=(LinearLayout) findViewById(R.id.lay_ver); 
    et=(EditText) findViewById(R.id.etadd); 
    bt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // multiple fragments are created 
      MyFragment f=new MyFragment(); 
      FragmentManager fm=getFragmentManager(); 
      FragmentTransaction t=fm.beginTransaction(); 
      t.add(R.id.sv1, f, "hi"); 
      t.commit(); 
      et.setText(""); 
     } 
    }); 
//would like to change the text of the textview of the fragment 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

片段代碼:

public class MyFragment extends Fragment{ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View v=inflater.inflate(R.layout.frag_lay, null); 


    return v; 
} 
} 

activity_main XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/lay_ver" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<LinearLayout 
    android:id="@+id/lay_hor" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <EditText 
     android:id="@+id/etadd" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="80" 
     android:hint="Enter Subject" 
     android:paddingTop="20dp" /> 

    <Button 
     android:id="@+id/badd" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="20" 
     android:text="Add" /> 
</LinearLayout> 

<ScrollView 
    android:id="@+id/sv" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/sv1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
    </LinearLayout> 
</ScrollView> 

片段XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/layfrag" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.53" 
     android:text="HiHow" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.20" 
     android:text="Hello" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <Button 
     android:id="@+id/button2" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

+0

是的。這是可能的。請告訴我們你已經嘗試了什麼,你準備好了哪裏。我們不是一個代碼製作者社區;) – mithrop

回答

0

您可以添加片段的列表中選擇活動和每個片段創建它們時的列表。然後你就可以得到你想要的改變,做片段cdblades說:

View parent = fragment.getView(); 
View childTextView = (TextView)parent.findViewById(R.id.myChildTextView); 

但是爲什麼你在同一容器中添加片段?

+0

因爲我希望它在相同的活動中顯示。我想識別在片段中創建的每個TextView,以便稍後進行編輯。 如果沒有使用片段的方式,請告訴。 我只想在單個活動中重複使用特定的佈局塊,並且同時能夠編輯塊中的視圖。 – saurabh

0

基本視圖類有,你可以用它來得到像這樣以子視圖的引用findById()方法:

View parent = fragment.getView(); 
View childTextView = (TextView)parent.findViewById(R.id.myChildTextView); 
+0

是的,但如果我使用相同的佈局創建不同的片段,這將如何提供幫助。與TextView關聯的id將是相同的。 對不起。我應該在我原來的問題中加入這個。將立即編輯它。 – saurabh

+0

@saurabh如果你在片段上調用findViewById(),它會在片段自己的視圖層次結構中查找,所以你應該沒有問題 – andrei

+0

@saurabh schopy是對的,但我會通過指出findById()可用對於每個View對象,並且將在它被調用的View下搜索層次結構。 – cdblades