在我的應用程序中,我有同一個片段的多個實例,Activity_Fragment
,顯示在LinearLayout中。在每個片段中,有一個activity_text
textview和一個edit_button
。當按下按鈕時,它應該改變同一片段中的文本視圖的文本。但是,添加片段的多個實例時,任何片段中的任何edit_button
只會更改添加到LinearLayout的第一個片段中的activity_text
textview。這是因爲所有片段都是相同的,並且他們的子視圖共享相同的ID。每個片段應該彼此獨立行事;在片段中按下的任何edit_button
只應該影響該片段。我可以將findViewById()限制在單個片段的範圍內嗎?
是否有可能將findViewById()方法限制爲單個片段的範圍,以便一個片段不會受到另一個片段中的事件的影響,還是必須以某種方式更改每個視圖的ID在創造一個片段?
下面是活動片段XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activity_fragment">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/activity_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="Edit Activity"
android:textSize="18sp"
app:layout_constraintBaseline_toBaselineOf="@+id/checkbox"
app:layout_constraintLeft_toRightOf="@+id/checkbox"
app:layout_constraintRight_toLeftOf="@+id/edit_button"/>
<Button
android:id="@+id/edit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
android:onClick="editActivity"
android:text="Edit Activity"
app:layout_constraintBaseline_toBaselineOf="@+id/checkbox"
app:layout_constraintRight_toRightOf="parent"/>
這是我與ActivityFragment類MainActivity.java。對於edit_button的onclick方法是在最底層:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static class ActivityFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.activity_fragment, container,
false);
}
}
public void addActivity(View view) {
ActivityFragment fragment1 = new ActivityFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment1).commit();
}
//This is the editButton method
public void editActivity(View view) {
TextView activityText = (TextView) findViewById(R.id.activity_text);
activityText.setText("success");
}
}
謝謝!我剛剛開始使用Android,而且我剛剛使用Android開發人員指南,因此大部分改變的內容對我來說都是新手,我不太瞭解其中的一些內容。主要是'@ Override','@ Nullable','root'和'.OnClickListener'。稍後會在Android培訓或API指南中介紹嗎?你有鏈接還是知道我可以在這裏閱讀更多內容? –
'@ Override'和'@ Nullable'可以忽略。它們是幫助您編寫不會中斷的代碼的註釋,但它們不會影響寫得很好的程序的行爲。 'root'只是一個我喜歡在'Fragment.onCreateView()'中使用的變量名(希望你能在片段教程中閱讀)。一個'View.OnClickListener'和你的'android:onClick'屬性是相同的概念,但是以不同的方式完成。你可以在Button文檔中閱讀一下它:https://developer.android.com/reference/android/widget/Button.html。最終所有這些都將是第二性質。 –
好的,非常感謝! –