0

私は Android プログラミングの初心者で、次の問題があります。

この簡単な例では、開始ボタンをクリックすると、フラグメントが実行されます。アラームボタンをクリックすると、ログファイルに書き込みます。

ここで、最初に開始ボタンをクリックすると、後でアラーム ボタンが実行されません。問題は、フラグメントがユーザーとのやり取りを離れないことだと思います。手伝って頂けますか?よろしくお願いしますA.

public class MainActivity extends FragmentActivity {
private static final String FRAG1_TAG = MainActivity.class.getCanonicalName() +".fragment1";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button buttonStart = (Button) findViewById(R.id.buttonStart);
    buttonStart.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            Log.i("exemple", "start button Start !!!!!!");
            goFragment();

        }
    }); 
    Button buttonAllarm = (Button) findViewById(R.id.buttonAllarm);
    buttonAllarm.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {            
        Log.i("exemple", "start button allarm !!!!!!");
        }// fine onClick    
    });// fine onClickListner
}

void goFragment() {

    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction xact = fm.beginTransaction();
    if (null == fm.findFragmentByTag(FRAG1_TAG)) {
        xact.replace(android.R.id.content, new ListFramment(), FRAG1_TAG);
         xact.addToBackStack (null);   // questo serve devi metterlo
            xact.commit();
    }
}

これがフラグメントです

      public class ListFramment extends ListFragment {
       // onCreate     
        @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
   }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_main, null);
    AppLog.logString("Parte onCreateView");
    return view;
}   

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    AppLog.logString("Parte onActivityCreated");
    ArrayList<Map<String, String>> list = buildData();

    String[] from = { "name", "purpose" };
    int[] to = { android.R.id.text1, android.R.id.text2 };

    SimpleAdapter adapter = new SimpleAdapter(getActivity(), list,
    android.R.layout.simple_list_item_2, from, to);
    setListAdapter(adapter);

}

    private ArrayList<Map<String, String>> buildData() {
    ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
    list.add(putData("Android", "Mobile"));
    list.add(putData("iPhone", "iPhone"));
    return list;
    // TODO Auto-generated method stub

}

private HashMap<String, String> putData(String name, String purpose) {
    HashMap<String, String> item = new HashMap<String, String>();
    item.put("name", name);
    item.put("purpose", purpose);
    return item;
}
}
4

2 に答える 2

3

あなたの問題はここにあります:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, null);
AppLog.logString("Parte onCreateView");
return view;
}   

フラグメントは、それを作成したアクティビティと同じレイアウトを膨らませています。しかし、フラグメントには onClickListeners がありません。Fragment レイアウトが Activity レイアウトを覆い隠し、機能しないボタンで正確に複製していると思われます。これで、ボタンのクリックが最初にしか機能しない理由が説明できます。

Fragment が Activity とは異なる独自のレイアウトを持つのは普通のことです。

于 2012-08-16T20:29:49.717 に答える
0

レイアウト ファイルが表示されないことは役に立ちません。しかし、それはフラグメントとは何の関係もないと思われます。

于 2012-08-16T19:04:59.153 に答える