所以,我试图通过扫过屏幕开始活动,它适用于所有其他屏幕,只是这个屏幕根本不会触发onTouch?你介意帮帮我吗?我试过调试它仍然根本不知道。以下是代码,对不起我只是因为我认为我可能在其他地方做错了
顺便说一句,我也正在寻求有关实施扫地改变屏幕的建议。我已经阅读了ViewFlipper,我知道它可以很好地工作,但我有大约8个屏幕,需要不同的后端编码。无论如何,我真的需要这方面的建议。非常感谢!!
阿尔文
<?xml version="1.0" encoding="utf-8"?>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textSize="20dip"
android:padding="5dip" android:textStyle="bold" android:text="@string/skills" />
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:padding="5dip"
android:textSize="12dip" android:layout_marginLeft="10dip"
android:text="@string/proficiency" />
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal"
android:gravity="center">
<Button android:id="@+id/cSharp" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/cSharp" />
<Button android:id="@+id/cLang" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/cLang" />
<Button android:id="@+id/visualC" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/visualC" />
<Button android:id="@+id/java" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/java" />
<Button android:id="@+id/vb" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/vb" />
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal"
android:gravity="center">
<Button android:id="@+id/perl" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/perl" />
<Button android:id="@+id/win" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/win" />
<Button android:id="@+id/unix" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/unix" />
<Button android:id="@+id/linux" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/linux" />
<Button android:id="@+id/php" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/php" />
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal"
android:gravity="center">
<Button android:id="@+id/oracle" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/oracle" />
<Button android:id="@+id/mysql" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/mysql" />
<Button android:id="@+id/mssql" android:layout_height="60dip"
android:layout_width="80dip" android:text="@string/mssql" />
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:padding="5dip"
android:orientation="horizontal" android:gravity="bottom|right">
<ImageButton android:id="@+id/skillsPrevious"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:paddingRight="3dip" android:src="@drawable/left" />
<ImageButton android:id="@+id/skillsNext"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:src="@drawable/right" />
</LinearLayout>
private float oldTouchValue;
private FormDbAdapter mDbHelper;
private Long mRowId;
private Button cSharp, cLang, visualC, java, vb, perl, win, unix;
private Button linux, php, oracle, mysql, mssql;
private ImageButton nextButton, previousButton;
private LinearLayout skillsView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mDbHelper = new FormDbAdapter(this);
mDbHelper.open();
setContentView(R.layout.skills);
cSharp = (Button)findViewById(R.id.cSharp);
cLang = (Button)findViewById(R.id.cLang);
visualC = (Button)findViewById(R.id.visualC);
java = (Button)findViewById(R.id.java);
vb = (Button)findViewById(R.id.vb);
perl = (Button)findViewById(R.id.perl);
win = (Button)findViewById(R.id.win);
unix = (Button)findViewById(R.id.unix);
linux = (Button)findViewById(R.id.linux);
php = (Button)findViewById(R.id.php);
oracle = (Button)findViewById(R.id.oracle);
mysql = (Button)findViewById(R.id.mysql);
mssql = (Button)findViewById(R.id.mssql);
nextButton = (ImageButton)findViewById(R.id.skillsNext);
previousButton = (ImageButton)findViewById(R.id.skillsPrevious);
skillsView = (LinearLayout)findViewById(R.id.skillsView);
mRowId = (savedInstanceState == null)? null:
(Long)savedInstanceState.getSerializable(FormDbAdapter.KEY_ID);
if(mRowId == null){
Bundle extras = getIntent().getExtras();
mRowId = extras.getLong(FormDbAdapter.KEY_ID);
}
populateFields();
nextButton.setOnClickListener(onClick);
previousButton.setOnClickListener(onClick);
cSharp.setOnClickListener(onClick);
cLang.setOnClickListener(onClick);
visualC.setOnClickListener(onClick);
java.setOnClickListener(onClick);
vb.setOnClickListener(onClick);
perl.setOnClickListener(onClick);
win.setOnClickListener(onClick);
unix.setOnClickListener(onClick);
linux.setOnClickListener(onClick);
php.setOnClickListener(onClick);
oracle.setOnClickListener(onClick);
mysql.setOnClickListener(onClick);
mssql.setOnClickListener(onClick);
skillsView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
oldTouchValue = event.getX();
break;
case MotionEvent.ACTION_UP:
if(event.getX() - oldTouchValue < -200){
createIntent(true);
return true;
}else if(event.getX() - oldTouchValue > 200){
createIntent(false);
return true;
}
}
return false;
}
});
}
protected View.OnClickListener onClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.skillsNext:
createIntent(true);
break;
case R.id.skillsPrevious:
createIntent(false);
break;
default:
addSkillDialog(v.getId());
}
}
};
/** direction = true => next page
* direction = false => previous page*/
protected void createIntent(boolean direction){
if(direction){
Intent i = new Intent();
i.putExtra(FormDbAdapter.KEY_ID, mRowId);
i.setClass(skills.this, languages.class);
startActivityForResult(i, 0);
}else{
setResult(RESULT_OK);
finish();
}
}
/** Create custom dialog for user to input skills info.
* @param id: id of the button clicked by user. */
protected void addSkillDialog(int id) {
// TODO Auto-generated method stub
final Button button = (Button)findViewById(id);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog alertDialog;
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.skillsdialog,
(ViewGroup)findViewById(R.id.skillsDialogId));
builder.setView(layout);
final RadioGroup radioExp = (RadioGroup)layout.findViewById(R.id.radioExp);
final RadioGroup radioPro = (RadioGroup)layout.findViewById(R.id.radioPro);
Cursor c = mDbHelper.fetchSkills(mRowId, button.getId());
if(c.moveToFirst()){
startManagingCursor(c);
if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("0")){
radioExp.check(R.id.zeroYear);
}else if (c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("1-2")){
radioExp.check(R.id.onetotwo);
}else if (c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("3-4")){
radioExp.check(R.id.threetofour);
}else{
radioExp.check(R.id.five);
}
if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_PRO)).equals("B")){
radioPro.check(R.id.B);
}else if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_PRO)).equals("I")){
radioPro.check(R.id.I);
}else{
radioPro.check(R.id.A);
}
}
builder.setTitle(button.getText().toString())
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String years = null;
String pro = null;
int expId = radioExp.getCheckedRadioButtonId();
int proId = radioPro.getCheckedRadioButtonId();
switch(expId){
case R.id.zeroYear:
years = "0";
break;
case R.id.onetotwo:
years = "1-2";
break;
case R.id.threetofour:
years = "3-4";
break;
case R.id.five:
years = ">5";
}
switch(proId){
case R.id.B:
pro = "B";
break;
case R.id.I:
pro = "I";
break;
case R.id.A:
pro = "A";
}
mDbHelper.newSkill(mRowId, button.getId(), pro, years);
button.setTypeface(Typeface.DEFAULT_BOLD);
}
})
.setNeutralButton("Undo Selection", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
mDbHelper.deleteSkill(mRowId, button.getId());
button.setTypeface(Typeface.DEFAULT);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
alertDialog = builder.create();
alertDialog.show();
}
/** Populate the fields in View if existed in database. */
protected void populateFields(){
Cursor c = mDbHelper.fetchAllSkills(mRowId);
while (c.moveToNext()){
startManagingCursor(c);
Button skillBtn = (Button)findViewById(c.getInt(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_NAME)));
skillBtn.setTypeface(Typeface.DEFAULT_BOLD);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode){
case MainPage.ACTIVITY_BACK:
populateFields();
break;
case MainPage.ACTIVITY_DONE:
setResult(MainPage.ACTIVITY_DONE);
finish();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
populateFields();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putSerializable(FormDbAdapter.KEY_ID, mRowId);
}
答案 0 :(得分:0)
您可以使用GestureDetector(这是检测滑动的更好方法)来检测活动的滑动。请在下面找到如何实现它的链接。我觉得您的代码问题是除了容器控件(在您的情况下为LinearLayout)之外,您还需要为所有控件注册TouchListerner。