【问题标题】:Add Button in Fragments [duplicate]在片段中添加按钮[重复]
【发布时间】:2017-05-18 20:12:45
【问题描述】:

我有一个 Java 类,它代表一个带有一些按钮的通用用户区域活动,我必须将这些按钮、文本 ecc 集成到一个选项卡式活动中。 这是泛型类。

public class UserAreaActivity extends AppCompatActivity {
    private Button scan_btn;
    // User Session Manager Class
    UserSessionManager session;
Context thisContext;

// Button Logout
Button btnLogout;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_area);

    thisContext = getApplicationContext();

    // Session class instance
    session = new UserSessionManager(getApplicationContext());

    final EditText etUsername= (EditText) findViewById(R.id.etUsername);
    final TextView welcomeMessage=(TextView) findViewById(R.id.tvWelcomeMsg);

    // Button logout
    btnLogout = (Button) findViewById(R.id.btnLogout);

//        Toast.makeText(getApplicationContext(),
//                "User Login Status: " + session.isUserLoggedIn(),
//

    //get user data from session
    HashMap<String, String> user = session.getUserDetails();
    //get name
    String name = user.get(UserSessionManager.KEY_NAME);
    // get username
    String username = user.get(UserSessionManager.KEY_USERNAME);



    //Intent intent = getIntent();



    String message = name + " welcome to your user area!";
    welcomeMessage.setText(message);
    etUsername.setText(username);

    scan_btn=(Button) findViewById(R.id.scan_btn);
    final Activity activity = this;

    btnLogout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Clear the User session data
            // and redirect user to LoginActivity
            session.logoutUser();
        }
    });

    scan_btn.setOnClickListener
            (
                    new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View view)
                        {
                            IntentIntegrator integrator = new IntentIntegrator(activity);
                            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
                            integrator.setPrompt("Scan");
                            integrator.setCameraId(0);
                            integrator.setBeepEnabled(false);
                            integrator.setBarcodeImageEnabled(false);
                            integrator.initiateScan();
                        }
                    }
            );
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null)
    {
        if(result.getContents()==null)
        {
            Toast.makeText(this,"Hai cancellato la scansione", Toast.LENGTH_LONG).show();
        }
        else
        {
            Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();
        }
    }
    else
    {
        super.onActivityResult(requestCode, resultCode, data);
    }

}

}

由于 Java 不支持多重继承,我如何同时从 AppCompatActivity 和 Fragment 扩展以集成到我的 TabbedView 按钮 ecc..?

这是我要放置代码的片段

public class Tab3Add extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.tab3add, container, false);
    return rootView;
}

}

【问题讨论】:

  • 你的问题我不清楚。实际上,片段用于完成活动中托管的部分工作。您所需的任务代码将在 Fragment 上实现,并且该片段将添加到活动中。看看这个vogella.com/tutorials/AndroidFragments/article.html
  • 你不能同时继承两个类。不能同时扩展 Activity 和 Fragment。但是您可以将它们分开但添加活动。 Fragment 部分将根据其在 Activity 上的流程执行

标签: java android fragment


【解决方案1】:

在这种情况下,您可以做的最好的事情是在 Fragment 中扩展 Activity 的布局并手动将点击处理程序和其他代码移动到其中,同时注意 Activity 和 Fragment 之间的生命周期差异:

public class Tab3Add extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_user_area, container, false);
    // Move your other code as well
    return rootView;
}

如果R.layout.activity_user_area 中有任何onClick 属性,您需要删除它们并以编程方式添加它们。

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 2018-04-22
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多