2014-01-16 40 views
1

我有一个片段onClick事件的一些问题。 我做选项卡的导航ActionBar中,并用TabListener碎片改变。 这工作正常。onClick事件片段

我的问题是,“”正常“” OnClickListener(见下文)不起作用。 我已经尝试了很多不同的things.Here的是当前的状态:

package com.artifact.actionbarfragments; 

    import android.app.ActionBar; 
    import android.app.ActionBar.Tab; 
    import android.app.Activity; 
    import android.app.Fragment; 
    import android.app.FragmentTransaction; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.CheckBox; 
    import android.widget.TextView; 


    public class ActionBarFragmentsActivity extends Activity { 
    /** Called when the activity is first created. */ 
    public OnClickListener listener; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // lädt die ActionBar 
    ActionBar actionbar = getActionBar(); 
    // ActionBar.LayoutParams(0); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionbar.setDisplayShowHomeEnabled(false); 
    actionbar.setDisplayShowTitleEnabled(false); 
    actionbar.setDisplayShowCustomEnabled(false); 

    // actionbar.setCustomView(R.layout.actionbarview); 

    // lädt die Tabs in die Actionbar und setzt ''eigene'' Icons 
     ActionBar.Tab TabA =    actionbar.newTab().setIcon(R.drawable.ic_action_view_as_list); 
    ActionBar.Tab TabB = actionbar.newTab().setIcon(R.drawable.ic_action_directions); 
    ActionBar.Tab TabC = actionbar.newTab().setIcon(R.drawable.ic_action_group); 
    ActionBar.Tab TabD = actionbar.newTab().setIcon(R.drawable.ic_action_person); 

    // erstellt neue Fragmente 
    Fragment fragmentA = new fragmentA(); 
    Fragment fragmentB = new fragmentB(); 
    Fragment fragmentC = new fragmentC(); 
      Fragment fragmentD = new fragmentD(); 

    // Listener werden angelegt 
    TabA.setTabListener(new MyTabsListener(fragmentA)); 
    TabB.setTabListener(new MyTabsListener(fragmentB)); 
    TabC.setTabListener(new MyTabsListener(fragmentC)); 
      TabD.setTabListener(new MyTabsListener(fragmentD)); 

    // Tabs werden in die actionbar geladen 
    actionbar.addTab(TabA); 
    actionbar.addTab(TabB); 
    actionbar.addTab(TabC); 
      actionbar.addTab(TabD); 

} 

    } 


class NotfallButtonListener extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.id.fragment_container); 
    final Button notfallbtn = (Button) findViewById(R.id.notfallbtn); 
    notfallbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      notfallbtn.setText("Notfall ausgelöst"); 
      System.out.println("Notfall Botton gedrückt"); 
     } 
    }); 

} 
} 

若以上的处理没有工作,我尝试保持的onClick类的片段:

public class fragmentA extends Fragment 
     implements View.OnClickListener 
    { 
    Button notfallbtn; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // das Layout fuer dieses Fragment laden 
     return inflater.inflate(R.layout.fragmenta, container, false); 

     // Button notfallbtn = (Button) findViewById(R.id.notfallbtn); 
     // notfallbtn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     class NotfallButtonListener extends Activity { 
      @Override 
      public void onCreate(Bundle savedInstanceState){ 
       super.onCreate(savedInstanceState); 
       setContentView(R.id.fragment_container); 
       final Button notfallbtn = (Button) findViewById(R.id.notfallbtn); 
       notfallbtn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         notfallbtn.setText("Notfall ausgelöst"); 
         System.out.println("Notfall Botton gedrückt"); 
        } 
       }); 

      } 
     } 
     } 
    } 

任何帮助将不胜感激!非常感谢!

回答

3

变化如下考虑按钮处于fragmneta.xml

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // das Layout fuer dieses Fragment laden 
     View view= inflater.inflate(R.layout.fragmenta, container, false); 
     // inflate layout 
     Button notfallbtn = (Button) view.findViewById(R.id.notfallbtn); 
     // initialize button using the inflated view object 
     notfallbtn.setOnClickListener(this); 
     // listener for button 
     return view; // return inflated view 
    } 

那么你已经有了

public class fragmentA extends Fragment 
     implements View.OnClickListener 

所以

@Override 
public void onClick(View v) 
{ 
    switch(v.getId()) 
    { 
     case R.id.notfallbtn: 
        // do something 
     break; 
    } 
} 

删除所有这些

@Override 
    public void onClick(View view) { 
     class NotfallButtonListener extends Activity { 
+0

太棒了!谢谢,这是有效的。一个小问题。 我如何改变例如一个TextView(id textview)。 '...情况下R.id.notfallbtn: textView.setText( “按下按钮”)' – johnbob

+0

@johnbob在onCreateView初始化的TextView就像按钮。但是在'onCreateView'上面声明textview。然后在按钮上点击设置文本到textview – Raghunandan

+0

ok初始化textview:'TextView textView =(TextView)view.findViewById(R.id.textView);'Donent't了解2.部分:/ Sry – johnbob