Abu*_*apa 12 android android-viewpager onclicklistener
我正在使用带有动态视图的ViewPager,如此链接所示.我将每个页面添加到viewpager.创建每个页面并将其添加到寻呼机适配器的代码如下
public View createPage( )
{
TableLayout table = new TableLayout(mycontext);
TableRow row = new TableRow(mycontext);
for(int i=0; i <= num_of_views; i++)
{
TableLayout catTable = new TableLayout(mycontext);
TableLayout.LayoutParams params = new TableLayout.LayoutParams();
params.height = LayoutParams.MATCH_PARENT;
TableRow catName = new TableRow(mycontext);
catName.setGravity(0x03);
catName.setLayoutParams(params);
TextView cat = new TextView(mycontext);
TableRow.LayoutParams RowParams=
new TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(85));
RowParams.weight = 1;
cat.setLayoutParams(RowParams);
cat.setPadding(35, 0, 5, 0);
cat.setGravity(0x13);
cat.setSingleLine(true);
cat.setHorizontallyScrolling(true);
cat.setFocusable(true);
cat.setFocusableInTouchMode(true);
cat.setLines(1);
cat.setText(data.getCats().get(i).getName());
cat.setTextColor(color);
cat.setSelected(true);
catName.addView(cat);
catTable.addView(catName);
for(int j=0; j < 5; j++)
{
TableRow trChild = new TableRow(mycontext);
trChild.setLayoutParams(params);
trChild.setGravity(0x11);
for (int k=0; k<4; k++)
{
TextView app = new TextView(mycontext);
TableRow.LayoutParams tableRowParams=
new TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(80));
margin = pixeltoDp(11);
tableRowParams.weight = 1;
app.setLayoutParams(tableRowParams);
app.setGravity(0x11);
app.setSingleLine(true);
app.setTextSize(pixeltoDp(12));
app.setTextColor(Color.BLACK);
app.setTypeface(verdana);
int pos = j+(k*5);
if((pos < mysize))
{
Drawable icon = getMyDrawable();
app.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null);
app.setText("some Name");
app.setTag(i+":"+pos);
app.setEllipsize(TextUtils.TruncateAt.END);
app.setOnClickListener(onMyClick);
}
trChild.addView(app);
}
catTable.addView(trChild);
}
TableRow.LayoutParams tableRowParams=
new TableRow.LayoutParams
(TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT);
margin = pixeltoDp(5);
tableRowParams.setMargins(margin,0,margin, pixeltoDp(18));
catTable.setLayoutParams(tableRowParams);
}
row.setGravity(0x03);
table.addView(row);
return table;
}
Run Code Online (Sandbox Code Playgroud)
页面中textview的OnClickListener如下所示
private View.OnClickListener onAppClick=new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String gettext = (String)v.getTag();
String[] splittext = gettext.split(":");
Log.d("TAG","Click Event is Triggered");
}
};
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当我在屏幕上滑动时,viewpager会滑动,但如果我的手指开始使用onclicklistener从文本中滑动,页面也不会滑动,也不会调用click事件.如果单击文本视图,则会调用click事件.如果使用click事件从文本视图开始滑动,我无法理解为什么viewpager没有翻页.
为了找出错误的原因,我向viewpager添加了一个ontouchlistener,发现当页面中没有文本视图并且没有调用触摸事件的部分进行滑动时,会调用viewpager的触摸事件.全部如果滑动在文本视图的顶部开始.如果我删除了textview的onclicklistener,那么整个viewpager会正常翻转而不会出现任何问题.所以问题是textview的click事件正在停止viewpager的触摸事件.如果我在创建页面代码中做错了,请告诉我.我在这个函数中创建的视图通过pageadapter添加到viewpager中,如我在开头提到的教程中所示.
Abu*_*apa 22
最后我发现最新版本的ViewPager中存在一个错误,其中带有click事件的TextView,singleLine设置为true且重力设置为center,如果手指从顶部开始移动,则不会将触摸事件传递给ViewPager textview.如果我们将singleLine设为false或删除Center gravity,那么事件将传递给ViewPager,然后它就可以抛出.我们不能同时使用center gravity和setsingleline(true)作为textview,也不能将sinlgeline设置为true的按钮.我在这里报告了这个错误
请参阅此处的"应用单行"来源:https://github.com/android/platform_frameworks_base/blob/7bfb1e7f46d2ed3df6cc467bccec95b5999d9cc4/core/java/android/widget/TextView.java#L7877
| 归档时间: |
|
| 查看次数: |
2675 次 |
| 最近记录: |