Вы должны добавить swip tp для imageView, а не для самостоятельного перелистывания, так как для imageview это вид, к которому прикоснулись, а не для флиппера.
создать интерфейс следующим образом,
public interface ISwip {
public void onSwip(MotionEvent event,int position);
}
[117 ] Реализовать это в MainActivity
public class MainActivity extends AppCompatActivity implements ISwip
инициировать адаптер с ISwip
public class TrendingViewPagerAdapter extends BaseAdapter {
ISwip iSwip;
public TrendingViewPagerAdapter(Context context, int[] moviePosters, ISwip iSwip) {
this.iSwip = iSwip;
}
установить mGestureDetector для imageView в адаптере вместо viewFlipper
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//set interface here and send event back to MainActivity
iSwip.onSwip(event,position)
return true;
}
});
удалить касание флиппера из MainActivity
viewFlipper.setOnTouchListener(new View.OnTouchListener() {
});
реализовать onSwip в MainActivity [1120 ]
@Override
public void onSwip(MotionEvent event, int position) {
itemClicked = position;
mGestureDetector.onTouchEvent(event);
}
Редактировать : добавить позицию в качестве второй переменной в методе интерфейса, в MainActivity, а затем использовать его внутри метода OnSingleTapUp () следующим образом: [ 1121]
class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// Swipe left (next)
if (e1.getX() > e2.getX()) {
viewFlipper.stopFlipping();
viewFlipper.showNext();
viewFlipper.startFlipping();
}
// Swipe right (previous)
if (e1.getX() < e2.getX()) {
viewFlipper.stopFlipping();
viewFlipper.showPrevious();
viewFlipper.startFlipping();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(MainActivity.this,"item Selected "+clickedPosition,Toast.LENGTH_LONG).show();
return super.onSingleTapUp(e);
}
Это сработало для меня.
}
Так скопируйте его вместо этого? Просто мысль. Имейте копию там только для поддержки сборки, которую Вы удаляете, после того как Вы сделаны с нею.
Я вижу несколько решений:
1-й: Добавьте блок в GAC (Ваш блок должен иметь строгое имя),
gacutil /I <assembly name>
2-й: Найдите блок через Кодовые базы или Зондирование в Вашем machine.config файле или в msbuild.exe.config
.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyCommon"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<codeBase version="2.0.0.0"
href="file://C:/yourpath/MyCommon.DLL"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
3-й: скопируйте блок в том же каталоге прежде и удалите, он после, как David M сказал.
Все эти «решения» создают больше зависимостей, которые усложняют среду. Должен быть более простой способ обновить путь проверки во время выполнения.
В частности, MSBuild должен позволять вам добавлять пути проверки в ваш файл .proj или указывать зависимые библиотеки dll
Вы можете определить настраиваемую UsingTask:
но вы не можете добавить зависимости? он должен быть включен ... здесь с чем-то вроде
<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>
Но нет, это не поддерживается ...