我搜索了很多看起来像这个问题的问题,但是没有找到我的答案.
我有一个活动,通过操作栏可以访问3个选项卡.我通过添加3个片段来实现这一点,这些片段扩展了我扩展视图类的自定义视图.
在数据库更改的那一刻,我尝试通过调用invalidate()/ postinvalidate()刷新我的选项卡中的视图,但这不起作用.调用片段的onCreateView就像我考虑的其他选项一样.
然而,当我转到另一个选项卡然后返回时,已经进行了更改,并且我的视图会按原样更新.
如何模拟更改为另一个选项卡时发生的相同事情?会发生什么 我试着看看Fragment生命周期(尝试调用onCreateView())来解决它,但它只是不想刷新/重绘它应该.
正确加载数据,因为当我更改为另一个选项卡时数据会更改.
我删除了一些代码,因为它不再相关.我实现了Cursorloaders而不是我自己的Observer模式来通知更改.这是我现在的主要活动.
问题是,如果我想重绘这些片段中的视图,我现在应该怎么做.如果我应用fragmentObject.getView().invalidate()它不起作用.我遇到了和以前一样的问题,但现在我的Observer通知加载器正确实现了数据库中的更改.
public class ArchitectureActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab EditTab = actionbar.newTab().setText("Edit");
ActionBar.Tab VisualizeTab = actionbar.newTab().setText("Visualize");
ActionBar.Tab AnalyseTab = actionbar.newTab().setText("Analyse");
Fragment editFragment = new EditFragment();
Fragment visualizeFragment = new VisualizeFragment();
Fragment analyseFragment = new AnalyseFragment();
EditTab.setTabListener(new MyTabsListener(editFragment));
VisualizeTab.setTabListener(new MyTabsListener(visualizeFragment));
AnalyseTab.setTabListener(new MyTabsListener(analyseFragment));
actionbar.addTab(EditTab);
actionbar.addTab(VisualizeTab);
actionbar.addTab(AnalyseTab);
ArchitectureApplication architectureApplication = (ArchitectureApplication)getApplicationContext();
architectureApplication.initialize();
getLoaderManager().initLoader(0, null, this);
getLoaderManager().initLoader(1, null, this);
}
public …Run Code Online (Sandbox Code Playgroud) java android android-fragments android-view android-loadermanager
如果用户触摸视图A并在视图B上拖动到底部,如何检测触摸事件.我想在视图B中检测触摸事件.
我在视图B中添加了触摸侦听器,但如果用户最初触摸A并拖过B,则不会接收事件.

在Activity中,您可以通过以下方式以编程方式创建LinearLayout:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
TextView tv1 = new TextView(this);
tv1.setText("HELLO");
ll.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText("WORLD");
ll.addView(tv2);
setContentView(ll);
}
Run Code Online (Sandbox Code Playgroud)
你如何在自定义View子类中做同样的事情?没有setContentView或onCreate方法......
android android-custom-view android-layout android-linearlayout android-view
我有帮助方法,View根据传递给方法的状态变量设置某些s 的可见性.有时,这些方法会被多次调用,并且View可见性不会改变.所以我发现自己开始检查每个人的可见性,View然后再按照以下思路进行设置:"没有必要将View的可见性更改为相同的可见性并无缘无故地刷新".
if (myView.getVisibility() != View.VISIBLE) {
myView.setVisibility(View.VISIBLE);
}
etc...
Run Code Online (Sandbox Code Playgroud)
但是,现在我想知道实现是否setVisibility已经考虑到这一点,并检查你是否设置了与View已有的相同的可见性,并且不会不必要地刷新View(我的代码试图做的).
那么有人知道我的"优化"是否实际上提高了性能,还是API已经领先于我?
这是我的布局文件:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#000"
tools:context=".CproductDetails" >
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_bg"
>
<ImageView
android:id="@+id/product_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_tweet_placeholder_photo_dark_error"
android:scaleType="center" />
<TextView
android:id="@+id/product_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textColor="#95ab56"
android:textSize="20sp"
android:layout_marginTop="7dip" />
<TextView
android:id="@+id/product_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="20sp"
android:textColor="#efeeea" />
<TextView
android:id="@+id/product_commerce"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="20sp" />
<TextView
android:id="@+id/product_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="15sp"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip" />
<TextView
android:id="@+id/product_township"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="15sp"
android:visibility="gone"
android:layout_marginBottom="10dip"
android:drawableLeft="@drawable/location_place"
android:drawablePadding="7dip" />
<TextView
android:id="@+id/product_website"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:autoLink="web"
android:textSize="15sp"
android:drawableLeft="@drawable/location_web_site"
android:drawablePadding="7dip" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用a SherlockDialogFragment来询问用户的一些输入.我的手机上的一切正常(Galaxy Nexus,4.2),但在较小的手机(模拟器2.3.3)上,当键盘出现时,它覆盖了DialogFragment的两个按钮,如下所示:

我的布局在ScrollView中,我正在将softInputMode更改为SOFT_INPUT_ADJUST_RESIZEmy onViewCreated.我也试过了SOFT_INPUT_ADJUST_PAN,但没用
MyCustomDialog.java
public class AddTaskDialog extends SherlockDialogFragment implements OnDateSetListener{
//...
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
this.inflater = getActivity().getLayoutInflater();
View mainView =inflater.inflate(R.layout.custom_dialog, null);
builder.setView(mainView);
this.taskNote = (EditText) mainView.findViewById(R.id.ET_taskNote);
this.taskText = (EditText) mainView.findViewById(R.id.ET_taskText);
this.taskValue = (EditText) mainView.findViewById(R.id.ET_taskValue);
/*
* Other stuff
*/
builder.setTitle(getString(R.string.new_task, hType.toString()))
.setPositiveButton(R.string.dialog_confirm_button, new …Run Code Online (Sandbox Code Playgroud) android android-view android-dialogfragment actionbarsherlock
我正在寻找一种方法将另一个布局膨胀到android中的第一个布局.怎么会这样做?这是两个XML文件.第一个是主要布局,第二个是我想要扩展到第一个布局.
我不能只包括布局,因为我将使用此方法将其他布局膨胀为线框.
代码也位于:http://pastebin.com/wjZ4s1cs,因为stackoverflow不喜欢XML.
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff000000"
>
<TextView
android:id="@+id/headerMenuText"
android:text="@string/main_menu_title"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:textSize="16pt"
android:paddingTop="10px"
android:paddingBottom="10px"
android:gravity="center"
>
</TextView>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_y="100dip"
android:gravity="center"
android:layout_gravity="center"
>
<TableRow
android:gravity="center"
android:layout_gravity="center">
<ImageView
android:id="@+id/menuItem1"
android:layout_height="101dip"
android:layout_width="89dip"
android:src="@drawable/icon_settings"
></ImageView>
<ImageView
android:id="@+id/menuItem2"
android:layout_height="101dip"
android:layout_width="89dip"
android:src="@drawable/icon_system_restart"
></ImageView>
<ImageView
android:id="@+id/menuItem3"
android:layout_height="101dip"
android:layout_width="89dip"
android:src="@drawable/icon_game_history"
></ImageView>
<ImageView
android:id="@+id/menuItem4"
android:layout_height="101dip"
android:layout_width="89dip"
android:src="@drawable/icon_game_correction"
></ImageView>
<ImageView
android:id="@+id/menuItem5"
android:layout_height="101dip"
android:layout_width="89dip"
android:src="@drawable/icon_game_other"
></ImageView>
</TableRow>
<TableRow android:gravity="center">
<TextView
android:id="@+id/menuItemText1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/main_menu_item_text_1"
android:layout_gravity="center"
android:gravity="center"
></TextView>
<TextView …Run Code Online (Sandbox Code Playgroud) 我setContentView(R.layout.main)用来在同一个活动中切换视图.我正在调用一些异步任务并在主布局文件上填充数据之后我通过调用setContentView(R.layout.main)方法更改视图.
我开始知道我们不应该setContentView多次使用方法进行相同的活动.虽然它对我来说很好.
任何人都可以解释为什么我们不应该setContentView多次使用方法来同一个活动来改变观点?
它会创建任何与内存相关的异常吗?有人可以澄清一下吗?
是否可以以编程方式枚举android.view.Window应用程序中的所有s或装饰视图?
Dialogs例如,它们都将在一个新的中打开Window,与主Activity窗口分开.我可以通过Dialog.getWindow()它找到它们,但我不确定如何使用内置组件(如活动菜单弹出窗口)执行此操作.
有什么办法,从Application,Context或者WindowManager,还是其他什么东西,枚举与我的应用程序关联的Windows?
我可以看到我的所有应用程序的窗口adb dumpsys window,但我正在寻找一种方法在我的应用程序中执行此操作而不需要root.
我正在尝试了解Android操作系统,当我阅读Google I/O 2014应用程序时,我遇到了WindowInsets.如果有人能解释他们是什么,那将是一个很大的帮助.谢谢.