- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据我在 Gridview 中单击的页面启动一个新的特定 Activity 。我试图了解随 sdk 一起提供的示例 GridViewPager 并尝试调整 given explanation .但我真的不知道如何将这两件事放在一起,甚至不知道从哪里开始。
第一个 java.file 选择
public class Selection extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.selection_grid);
final GridViewPager pager = (GridViewPager) findViewById(R.id.pager);
pager.setAdapter(new Workers(this, getFragmentManager()));
DotsPageIndicator dotsPageIndicator = (DotsPageIndicator) findViewById(R.id.page_indicator);
dotsPageIndicator.setPager(pager);
}
}
和第二个 java.file 用户:
public class Users extends FragmentGridPagerAdapter {
private static final int TRANSITION_DURATION_MILLIS = 100;
private final Context mContext;
private List<Row> mRows;
private ColorDrawable mDefaultBg;
private ColorDrawable mClearBg;
public Users (Context ctx, FragmentManager fm) {
super(fm);
mContext = ctx;
mRows = new ArrayList<Workers.Row>();
mRows.add(new Row(cardFragment(R.string.title, R.string.user1)));
mRows.add(new Row(cardFragment(R.string.title, R.string.user2)));
mRows.add(new Row(cardFragment(R.string.title, R.string.user3)));
mRows.add(new Row(cardFragment(R.string.title, R.string.user4)));
// In case in one row several cardFragments are needed
// mRows.add(new Row(
// cardFragment(R.string.cards_title, R.string.cards_text),
// cardFragment(R.string.expansion_title, R.string.expansion_text)));
mDefaultBg = new ColorDrawable(R.color.dark_grey);
mClearBg = new ColorDrawable(android.R.color.transparent);
}
LruCache<Integer, Drawable> mRowBackgrounds = new LruCache<Integer, Drawable>(3) {
@Override
protected Drawable create(final Integer row) {
int resid = BG_IMAGES[row % BG_IMAGES.length];
new DrawableLoadingTask(mContext) {
@Override
protected void onPostExecute(Drawable result) {
TransitionDrawable background = new TransitionDrawable(new Drawable[] {
mDefaultBg,
result
});
mRowBackgrounds.put(row, background);
notifyRowBackgroundChanged(row);
background.startTransition(TRANSITION_DURATION_MILLIS);
}
}.execute(resid);
return mDefaultBg;
}
};
private Fragment cardFragment(int titleRes, int textRes) {
Resources res = mContext.getResources();
CardFragment fragment =
CardFragment.create(res.getText(titleRes), res.getText(textRes));
// Add some extra bottom margin to leave room for the page indicator
fragment.setCardMarginBottom(
res.getDimensionPixelSize(R.dimen.card_margin_bottom));
return fragment;
-----------------Changed part - Start (deleted the above part of the method)----------------
// Resources res = mContext.getResources();
// MyCardFragment.create(res.getText(titleRes), res.getText(textRes));
-----------------Changed part - End------------------
}
static final int[] BG_IMAGES = new int[] {
R.drawable.user1,
R.drawable.user2,
R.drawable.user3,
R.drawable.user4
};
/** A convenient container for a row of fragments. */
private class Row {
final List<Fragment> columns = new ArrayList<Fragment>();
public Row(Fragment... fragments) {
for (Fragment f : fragments) {
add(f);
}
}
public void add(Fragment f) {
columns.add(f);
}
Fragment getColumn(int i) {
return columns.get(i);
}
public int getColumnCount() {
return columns.size();
}
}
@Override
public Fragment getFragment(int row, int col) {
Row adapterRow = mRows.get(row);
return adapterRow.getColumn(col);
}
@Override
public Drawable getBackgroundForRow(final int row) {
return mRowBackgrounds.get(row);
}
@Override
public int getRowCount() {
return mRows.size();
}
@Override
public int getColumnCount(int rowNum) {
return mRows.get(rowNum).getColumnCount();
}
class DrawableLoadingTask extends AsyncTask<Integer, Void, Drawable> {
private static final String TAG = "Loader";
private Context context;
DrawableLoadingTask(Context context) {
this.context = context;
}
@Override
protected Drawable doInBackground(Integer... params) {
Log.d(TAG, "Loading asset 0x" + Integer.toHexString(params[0]));
return context.getResources().getDrawable(params[0]);
}
}
}
编辑:第三个 java.file MyCardFragment
public class MyCardFragment extends CardFragment {
private View fragmentView;
@Override
protected View onCreateContentView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
fragmentView = super.onCreateContentView(inflater, container, savedInstanceState);
return fragmentView;
}
public void setOnClickListener(final View.OnClickListener listener) {
this.fragmentView.setOnClickListener(listener);
}
}
更新日志:
02-24 13:53:18.149 3104-3104/de.denjo.fragmentapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: de.denjo.fragmentapplication, PID: 3104
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4007)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4002)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {de.denjo.fragmentapplication/android.text.Selection}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1761)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1485)
at android.app.Activity.startActivityForResult(Activity.java:3736)
at android.app.Activity.startActivityForResult(Activity.java:3697)
at android.app.Activity.startActivity(Activity.java:4007)
at android.app.Activity.startActivity(Activity.java:3975)
at de.denjo.fragmentapplication.MainActivity.OnClickSelection(MainActivity.java:35)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4002)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
最佳答案
下面是我的做法
扩展 CardFragment:
class MyCardFragment extends CardFragment {
private View fragmentView;
private OnClickListener listener;
@Override
protected View onCreateContentView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
fragmentView = super.onCreateContentView(inflater, container, savedInstanceState);
fragmentView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View view) {
if (listener != null) {
listener.onClick(view);
}
}
}
return fragmentView;
}
public void setOnClickListener(final OnClickListener listener) {
this.listener = listener;
}
}
就是这样:)
UPD(同时查看更新的 MyCardFragment,否则您将得到 NullPointerException!):
private Fragment cardFragment(int titleRes, int textRes) {
Resources res = mContext.getResources();
final MyCardFragment fragment = MyCardFragment.create(res.getText(titleRes), res.getText(textRes));
fragment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View view) {
//do everything you want
//here you've got access to clicked fragment
}
}
return fragment;
}
关于android - 按下 Gridviewpager 时如何更改为另一个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419057/
在我的 Adroid Wear 应用程序中,我有一个 GridViewPager 和一个自定义 FragmentGridPagerAdapter。我在启动应用程序时实例化我的 adpater,并在稍后
我正在构建一个 Android Wear 应用程序,我想将其呈现为几个可以水平滑动的页面。 为此,我使用了 GridViewPager 和关联的 FragmentGridPagerAdapter,它们
我正在尝试根据我在 Gridview 中单击的页面启动一个新的特定 Activity 。我试图了解随 sdk 一起提供的示例 GridViewPager 并尝试调整 given explanation
我有 2 行 3 列的 GridViewPager。作为其默认行为,如果您在任何页面上向下滑动,它将导航到下一行的第一页。但我想覆盖该行为并停止在第一行第二列和第三列上向下滑动。 我尝试放置 2 行一
我在 Android Wear 应用程序中使用 GridViewPager,我想检测 onPageScrolled 或 OnTouch,这将使我能够检查用户所在的页面,以便我可以运行适当的代码。在 A
我是 android 开发的新手,我正在尝试在不使用示例代码中使用的卡片的情况下在 android wear 中创建布局。我想我需要使用 fragment 来执行此操作,但我无法弄清楚如何使用 Car
我目前正在设计一款可穿戴应用,它使用 4 行 5 列的 GridViewPager。 我有几个关于滚动的问题: 是否可以使用 Java 函数直接转到特定的行和列?我试过 scrollTo 但它不起作用
我正在尝试实现一个 GridViewPager,以便我可以在 2 个独特的 View 之间切换。到目前为止,我根本无法添加任何 View 。下面是我的代码 public class Gridder e
我在为 Android Wear 使用 GridViewPager 时遇到问题。将它添加到我的布局时,Android Studio 说没有这样的类(空指针异常)。我究竟做错了什么?我正在使用 Andr
我有一个单独运行良好的 WatchViewStub - 它在适当的方形或圆形 android wear 模拟器上显示正确的布局。但是,当我尝试在 GridViewPager 中使用 WatchView
我是一名优秀的程序员,十分优秀!