小编fll*_*llo的帖子

269
推荐指数
7
解决办法
24万
查看次数

确定设备是智能手机还是平板电脑?

我想获得有关设备的信息,看看它是智能手机还是平板电脑.我该怎么做?

我想根据设备类型显示来自资源的不同网页:

String s="Debug-infos:";
s += "\n OS Version: " + System.getProperty("os.version") + "(" +    android.os.Build.VERSION.INCREMENTAL + ")";
s += "\n OS API Level: " + android.os.Build.VERSION.SDK;
s += "\n Device: " + android.os.Build.DEVICE;
s += "\n Model (and Product): " + android.os.Build.MODEL + " ("+ android.os.Build.PRODUCT + ")";
Run Code Online (Sandbox Code Playgroud)

但是,对我来说似乎没用.


这个解决方案现在适用于我:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;

if (SharedCode.width > 1023 || SharedCode.height > 1023){
   //code for big screen (like tablet)
}else{ …
Run Code Online (Sandbox Code Playgroud)

android device-detection

251
推荐指数
7
解决办法
16万
查看次数

在使用带有ViewPager的选项卡时获取错误"Java.lang.IllegalStateException Activity已被销毁"

我有一个应用程序,包括在选项卡模式下使用ActionBarSherlock.我有5个选项卡,每个选项卡的内容使用片段处理.但是对于tab2,我有一个片段,其xml文件包含一个ViewPager元素,该元素又包含一些片段页面.当我最初启动应用程序的应用程序时,我能够在选项卡之间切换没有问题,但是当我第二次按下tab2时,我得到上面提到的错误.主要活动如下:

public class MainActivity extends SherlockFragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getSupportActionBar();

        ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1");
        ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3");
        ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2");
        ActionBar.Tab tab4 = actionBar.newTab().setText("Tab4");
        ActionBar.Tab tab5 = actionBar.newTab().setText("Tab5");

        Fragment fragment1 = new Tab1();
        Fragment fragment3 = new Tab3();
        Fragment fragment2 = new Tab2();
        Fragment fragment5 = new Tab5();
        Fragment fragment4 = new Tab4();

        tab1.setTabListener(new MyTabListener(fragment1));
        tab3.setTabListener(new MyTabListener(fragment3));
        tab2.setTabListener(new MyTabListener(fragment2));
        tab5.setTabListener(new MyTabListener(fragment5));
        tab4.setTabListener(new MyTabListener(fragment4));

        actionBar.addTab(tab1);
        actionBar.addTab(tab2);
        actionBar.addTab(tab3);
        actionBar.addTab(tab4);
        actionBar.addTab(tab5); 

        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager actionbarsherlock android-nested-fragment

109
推荐指数
3
解决办法
10万
查看次数

Android 4.2:嵌套片段的后台堆栈行为

在Android 4.2中,支持库获得了对嵌套片段的支持,请参见此处.我玩过它并发现了一个有关back stack和getChildFragmentManager()的有趣行为/ bug .当使用getChildFragmentManager()和addToBackStack(String name)时,通过按下后退按钮,系统不会将后栈运行到前一个片段.另一方面,当使用getFragmentManager()和addToBackStack(String name)时,按下后退按钮,系统将返回上一个片段.

对我来说,这种行为是出乎意料的.通过按下设备上的后退按钮,即使片段被添加到子节点片段管理器中的后栈,我也希望弹出最后添加到后栈的片段.

这种行为是否正确?这种行为是个错误吗?这个问题有解决方法吗?

使用getChildFragmentManager()的示例代码:

public class FragmentceptionActivity extends FragmentActivity {

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

    final FrameLayout wrapper1 = new FrameLayout(this);
    wrapper1.setLayoutParams(new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT));
    wrapper1.setId(1);

    final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.WRAP_CONTENT);
    params.topMargin = 0;

    final TextView text = new TextView(this);
    text.setLayoutParams(params);
    text.setText("fragment 1");
    wrapper1.addView(text);

    setContentView(wrapper1);

    getSupportFragmentManager().beginTransaction().addToBackStack(null)
            .add(1, new Fragment1()).commit();
}

public class Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-nested-fragment

103
推荐指数
6
解决办法
4万
查看次数

过渡动画期间嵌套片段消失

这里的情景:活动包含片段A,又使用getChildFragmentManager()添加片段A1,并A2在其onCreate像这样:

getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.fragmentOneHolder, new FragmentA1())
  .replace(R.id.fragmentTwoHolder, new FragmentA2())
  .commit()
Run Code Online (Sandbox Code Playgroud)

到目前为止,这么好,一切都按预期运行.

然后,我们在Activity中运行以下事务:

getSupportFragmentManager()
  .beginTransaction()
  .setCustomAnimations(anim1, anim2, anim1, anim2)
  .replace(R.id.fragmentHolder, new FragmentB())
  .addToBackStack(null)
  .commit()
Run Code Online (Sandbox Code Playgroud)

在转换期间,enter片段的动画B正确运行,但片段A1和A2完全消失.当我们使用"后退"按钮恢复事务时,它们会正确初始化并在popEnter动画期间正常显示.

在我的简短测试中,它更奇怪 - 如果我为子片段设置动画(见下文),exit当我们添加片段时,动画会间歇性地运行B

getChildFragmentManager()
  .beginTransaction()
  .setCustomAnimations(enter, exit)
  .replace(R.id.fragmentOneHolder, new FragmentA1())
  .replace(R.id.fragmentTwoHolder, new FragmentA2())
  .commit()
Run Code Online (Sandbox Code Playgroud)

我想要实现的效果很简单 - 我希望片段(anim2)上的exit(或应该是popExit?)动画A运行,为整个容器(包括其嵌套的子容器)设置动画.

有没有办法实现这一目标?

编辑:请在这里找到一个测试用例

编辑2:感谢@StevenByle推动我继续尝试使用静态动画.显然你可以在每个操作的基础上设置动画(不是整个事务的全局),这意味着孩子们可以有一个不确定的静态动画集,而他们的父可以有不同的动画,整个事情可以在一个事务中提交.请参阅下面的讨论和更新的测试用例项目.

android android-fragments android-support-library android-nested-fragment

99
推荐指数
5
解决办法
2万
查看次数

onActivityResult()未在新的嵌套片段API中调用

我一直在使用Android包含在支持库中的新嵌套片段 API.

我面对嵌套片段的问题是,如果嵌套片段(即通过FragmentManager返回的by 已经添加到另一个片段的片段getChildFragmentManager())调用startActivityForResult(),onActivityResult()则不会调用嵌套片段的方法.但是,父片段onActivityResult()和活动onActivityResult()都会被调用.

我不知道我是否遗漏了有关嵌套片段的内容,但我没想到所描述的行为.下面是重现此问题的代码.如果有人能指出我正确的方向并向我解释我做错了什么,我将非常感激:

package com.example.nestedfragmentactivityresult;

import android.media.RingtoneManager;
import android.os.Bundle;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends FragmentActivity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, new ContainerFragment())
            .commit();
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        // This is called
        Toast.makeText(getApplication(),
            "Consumed by activity",
            Toast.LENGTH_SHORT).show(); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-nested-fragment

76
推荐指数
4
解决办法
3万
查看次数

getSupportFragmentManager()未定义

我收到以下错误:"方法getSupportFragmentManager()未定义为我的片段文件中显示的新类型View.OnClickListener(){}".

我有通过ABS引用的兼容性库和适当的导入.我重新安装了带有兼容性库的ABS库,清理了项目,重新启动了Eclipse,但没有任何工作.

基本上,我试图让片段通过对话框片段显示日期选择器.选择日期后,必须将其返回到片段,以便可以根据该日期计算信息.

这是我片段的代码:

package com.owentech.abstabsviewpager;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import com.actionbarsherlock.app.SherlockFragment;

public class ObstetricsFragment1 extends SherlockFragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    //Fragment Layout
    View view = inflater.inflate(R.layout.obstetricsfragment1, container, false);

    Button mPickLMPDate = (Button) view.findViewById(R.id.pickLMPDate);

    mPickLMPDate.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            LMPDatePickerDialogFragment …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-dialogfragment actionbarsherlock

54
推荐指数
2
解决办法
9万
查看次数

TabFragment中的ViewPager未加载第二次

我正在尝试制作一个在片段中具有ViewPager的应用程序,该片段是TabHost的一部分.

一切都很好.我有我的tabbar,我可以切换标签.当我使用ViewPager切换到选项卡时,所有内容都正确显示.但是,只要我将此选项卡与ViewPager一起退出并返回此选项卡,我的内容就不会显示.如果我滚动到两侧,我会看到我的下一张图像.如果我回去两次,我也会看到图像被加载(可能是屏幕加载的)当我返回时我看到我的TabFragment正在重新实例化,但ViewPager中的片段却没有.

我已经包含了一个屏幕样机和一些代码.

有人可以帮忙吗?

干杯!

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    mProjectText = (TextView) getView().findViewById(R.id.projectText);
    mProjectText.setText(mActiveProject.getInspirationText());

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

    mPager = (ViewPager)getView().findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);


    super.onActivityCreated(savedInstanceState);
}




public class AlbumAdapter extends FragmentStatePagerAdapter {

private ArrayList<ProjectContent> mItems;

public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
    super(fm);
    this.mItems = items;
}

@Override
public Fragment getItem(int position) {
    return AlbumContentFragment.newInstance(mItems.get(position));
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}}
Run Code Online (Sandbox Code Playgroud)

该应用程序的模型

android android-fragments android-viewpager android-nested-fragment

50
推荐指数
3
解决办法
1万
查看次数

动态更改片段标签主机中的片段?

我有一个主要的活动,这里是片段活动我在B片段中设置两个片段A和B两个片段当用户点击按钮时我有一个按钮我想将片段B更改为片段C.但是上面的标签是可见的......

如何在标签内实现替换片段?

非常感谢任何解决方案.

android android-tabhost android-fragments fragment-tab-host android-nested-fragment

41
推荐指数
1
解决办法
3万
查看次数

android:isScrollContainer有什么作用?

有谁知道做什么android:isScrollCOntainer = (boolean)$(View).setScrollContainer(boolean)做什么?

起初我认为这将是在ScrollView中设置View而不是使用ScrollView滚动的答案,但似乎并非如此.

在Android开发者身上,它说,

"如果视图将用作滚动容器,则设置此项,这意味着可以调整其大小以缩小其整个窗口,以便为输入方法提供空间."

任何人都可以解释这个描述的含义吗?
在这种情况下,什么是滚动容器?
什么样的输入法可用?

android scroll view

40
推荐指数
1
解决办法
3万
查看次数