3

私はJavaとAndroidのプログラミングに非常に慣れていません。ListFragment を拡張するクラスに添付された xml ファイルに setContentView を使用する別のアクティビティを介して、あるアクティビティから変数のバンドルを渡す方法を見つけようとしています。基本的には、2番目のアクティビティでアクセスされるフラグメントから、1番目のアクティビティのデータにアクセスできるようにしたいです。これまでのところ、これを利用できるように調査しようとしてきたので、回答が既にここに存在する場合はご容赦ください。

次のことを行う Login.java というアクティビティがあります。

Intent intent = new Intent(this, ListActivity.class);
Bundle varBundle = new Bundle();
varBundle.putString("companyKey",companyKey);
varBundle.putString("techID",techID);
varBundle.putString("userID",userID);       
varBundle.putString("startDate",startDate);
intent.putExtras(varBundle);
startActivity(intent);

ListActivity.java には、これまでのところ次のようなものがあります。

public class ListActivity extends Activity 
{
public String companyKey;
public String techID;
public String userID;
public String startDate;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    Bundle vars = getIntent().getExtras();

    companyKey = vars.getString("companyKey");
    techID = vars.getString("techID");
    userID = vars.getString("userID");
    startDate = vars.getString("startDate");

    setContentView(R.layout.fragmentlist);


}

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

}

コンテンツ ビューを fragmentlist.xml に設定します。

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/titles"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.technicianappointmentlist.OrderList" />

Fragmentlist.xml は OrderList.java に関連付けられています。これは、ListActivity.java に渡されたバンドルからのデータにアクセスできるようにしたい場所です。

public class OrderList extends ListFragment
{
//THIS IS WHERE I WANT TO ACCESS THE VARIABLES PASSED INTO ListActivity.java    
public OrderList() 
{
    super();
    // TODO Auto-generated constructor stub
}


@SuppressWarnings({ })
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

}
}

これは可能ですか?これが初心者の質問である場合は申し訳ありませんが、これに対する答えはまだ見つかりません。

前もって感謝します。

4

2 に答える 2

2

(フラグメント内から)呼び出すことができます

String companyKey = ((ListActivity)getActivity()).companyKey;
String techId = ((ListActivity)getActivity()).techId;
String userId = ((ListActivity)getActivity()).userId;
String startDate = ((ListActivity)getActivity()).startDate;
于 2013-06-20T16:08:33.693 に答える
2

フラグメントが常にそのアクティビティにのみアタッチされる場合は、アクティビティにパブリック メソッドを作成できます。次に、フラグメントとアクティビティの間にその関係を強制します。

public class OrderList extends ListFragment {
    private MyListActivity activity;

    @Override
    public void onAttach(Activity activity) {
        if (!(activity instanceof MyListActivity)) {
            throw new IllegalStateException("must be attached to an instance of MyListActivity!");
        }
        this.activity = activity;
    }

    /* elsewhere you can call public methods defined in MyListActivity */
}

この結合が好みに合わない場合は、代わりにインターフェイスを作成し、アクティビティにそのインターフェイスを実装させることができます。

他の方法でも行うことができます。を使用してアクティビティからフラグメントを見つけ、FragmentManagerそれが OrderList のインスタンスであるかどうかを確認し、それに対してパブリック メソッドを呼び出します。

OrderList fragment = (OrderList) getFragmentManager().findFragmentById(R.id.titles);
fragment.whatever();
于 2013-06-20T16:10:21.997 に答える