在布局中点击会重定向到另一个布局

9
我有一个布局,用于显示问题和选项,如果我点击除按钮以外的任何地方,都会跳转到默认布局。我想知道这是为什么。 我的类
package com.example.demo;

public class MainActivity extends Activity implements OnClickListener {

    DBHelper helper;
    SQLiteDatabase db;
    Button btnBegin,btnnext,btnredirect;
    int count = 0;
    int response = 0;

    View previouslySelectedItem = null;



    //Sub category Buttons
    Button btnaptitude5,btnaptitude4,btnaptitude3,btnaptitude2,btnaptitude1;

    String Question_ID,Title,TitleDescription,QuestionText,QuestionTemplate,QuestionImage;

    //String SubModuleQuestion_ID;

    TextView tvTitle,tvInstructions,tvQuestionText;

    RadioGroup rgtemplate4images;
    ImageView img;
     RelativeLayout aptitudesubcateg,temp4optimage, redirecttemplate;
    ListView listviewoptions;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.aptitude);

          aptitudesubcateg = (RelativeLayout) findViewById(R.id.aptitudesubcateg);
          temp4optimage = (RelativeLayout) findViewById(R.id.temp4optimage);

          temp4optimage.setClickable(false);

          redirecttemplate = (RelativeLayout) findViewById(R.id.redirecttemplate);

         // int position = 1;
          listviewoptions = (ListView)findViewById(R.id.listViewoptions);

            listviewoptions.setOnItemClickListener(new OnItemClickListener() {


                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,int position ,
                        long arg3) {

                    //arg1.setBackgroundColor(getResources().getColor(
                               // R.color.pressed_color)); 

                     if (previouslySelectedItem != null)
                        {
                            previouslySelectedItem.setBackgroundColor(Color.TRANSPARENT);
                                    //getResources().getColor(R.color.pressed_color));
                        }

                     arg1.setBackgroundColor(Color.WHITE);
                               // getResources().getColor(R.color.default_color));

                        previouslySelectedItem = arg1;
                    // TODO Auto-generated method stub
                     Toast.makeText(getApplicationContext(),String.valueOf(position+1), Toast. LENGTH_SHORT).show();
                     response = position+1;

                }
            });



         aptitudesubcateg.setVisibility(View.GONE);
         temp4optimage.setVisibility(View.GONE);
         redirecttemplate.setVisibility(View.GONE);


        btnaptitude1 = (Button)findViewById(R.id.btnaptitude1);
        btnaptitude2 = (Button)findViewById(R.id.btnaptitude2);
        btnaptitude3 = (Button)findViewById(R.id.btnaptitude3);
        btnaptitude4 = (Button)findViewById(R.id.btnaptitude4);
        btnaptitude5 = (Button)findViewById(R.id.btnaptitude5);

        btnredirect = (Button)findViewById(R.id.btnredirect);


        btnaptitude1.setOnClickListener(this);
        btnaptitude2.setOnClickListener(this);
        btnaptitude3.setOnClickListener(this);
        btnaptitude4.setOnClickListener(this);
        btnaptitude5.setOnClickListener(this);
        btnredirect.setOnClickListener(this);

        helper=new DBHelper(this);


//addQuestion();

        btnBegin = (Button)findViewById(R.id.btnBeginAptitude);

        btnBegin.setOnClickListener(this);

        btnnext = (Button)findViewById(R.id.btnNxtTemp4optnsImg);

        btnnext.setOnClickListener(this);

    }


     public void addQuestion()
        {
            {

                // Add Record with help of ContentValues and DBHelper class object
                ContentValues values = new ContentValues();
            //  values.put(DBHelper.Q_ID, "a");


                values.put(DBHelper.Module_ID,"1");
                values.put(DBHelper.SubModule_ID,"2");
                values.put(DBHelper.Question_ID,"2" );
                values.put(DBHelper.SubModuleQuestion_ID,"1");
                values.put(DBHelper.Title,"Test");
                values.put(DBHelper.TitleDescription, "Demo");
                values.put(DBHelper.QuestionText, "I find it easy to discuss any topic with a new person");
                values.put(DBHelper.QuestionImage, "user.png");
                values.put(DBHelper.QuestionTemplate, "template4options.xml");
                values.put(DBHelper.CorrectOptionID, "1");

                // Call insert method of SQLiteDatabase Class and close after
                // performing task
                db = helper.getWritableDatabase();
                db.insert(DBHelper.TableQuestionMaster, null, values);
                db.close();


                Toast.makeText(this, "Question Added Successfully",
                        Toast.LENGTH_LONG).show();


                }
        }

     public int getcount(String moduleID, String SubModuleID)
     {
         count = 0;
         String selectQuery = "Select * from TableQuestionMaster where Module_ID = "+moduleID+" AND SubModule_ID ="+SubModuleID;

            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);
            count =  cursor.getCount();

            Toast.makeText(this, String.valueOf(count) ,Toast.LENGTH_LONG).show(); 

            cursor.close();
            db.close();

    return count; 
     }

       private void Getoptions() {
            // database handler
            DBHelper db = new DBHelper(getApplicationContext());

            // Spinner Drop down elements
             List<String> options = db.getAllOptions(Question_ID);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, android.R.id.text1, options);

            listviewoptions.setAdapter(adapter);

            //Toast.makeText(this,"",Toast.LENGTH_LONG).show();
        }



       public void getAllQuestionsAptitude(String moduleID, String SubModuleID,String SubModuleQuestion_ID){



           SQLiteDatabase db = helper.getReadableDatabase();
           Cursor c = null;

           if (count>0)
            {

           //   SubModuleQuestion_ID = "1";
                   String selectQuestion = "Select * from TableQuestionMaster where Module_ID = "+moduleID+" AND SubModule_ID ="+SubModuleID+" AND SubModuleQuestion_ID ="+SubModuleQuestion_ID;
                      c = db.rawQuery(selectQuestion, null);
            if (c.moveToFirst()) {
                do {


                    Question_ID = c.getString(c.getColumnIndex("Question_ID")); 

                    Title = c.getString(c.getColumnIndex("Title"));


                    TitleDescription = c.getString(c.getColumnIndex("TitleDescription"));


                    QuestionText = c.getString(c.getColumnIndex("QuestionText"));


                    QuestionTemplate = c.getString(c.getColumnIndex("QuestionTemplate"));


                    QuestionImage = c.getString(c.getColumnIndex("QuestionImage"));

                    Toast.makeText(this,Question_ID+" "+Title+" "+TitleDescription+" "+QuestionText+" "+QuestionTemplate+" "+QuestionImage,Toast.LENGTH_LONG).show();

                    Getoptions();

                } while (c.moveToNext());        
            }
            }
            else

            {
                 Toast.makeText(this,"NO question to display",Toast.LENGTH_LONG).show();

            }


            // closing connection
            c.close();
            db.close();

        }

       public void displayquestions()
       {
           Toast.makeText(this,"count on display Q is"+ count,Toast.LENGTH_LONG).show();
           if (count >0)
           {
               getAllQuestionsAptitude("1","2",String.valueOf(count));

                    aptitudesubcateg.setVisibility(View.GONE);                            
                    temp4optimage.setVisibility(View.VISIBLE); 

                    tvTitle = (TextView)findViewById(R.id.tvTitleTemplate4optoinsImage);
                    tvInstructions = (TextView)findViewById(R.id.tvInstructionstemplate4);
                    tvQuestionText = (TextView)findViewById(R.id.tvQuestionTextTemplate4ImageAptitude);

                    img = (ImageView)findViewById(R.id.imageViewtemplate4optionsAptitude);

                    tvTitle.setText(Title);
                    tvInstructions.setText(TitleDescription);
                    tvQuestionText.setText(QuestionText);

                    String imgName = QuestionImage; // specify here your image name fetched from db
                    String uri = "drawable/" + imgName;
                    int icon = getResources().getIdentifier(uri, "drawable", getPackageName());
                    img.setImageResource(icon);


                    //NextQuestion();
           }
           else
           {
               aptitudesubcateg.setVisibility(View.GONE);
                  temp4optimage.setVisibility(View.GONE);
                  redirecttemplate.setVisibility(View.VISIBLE);
               Toast.makeText(this,"NO question to display",Toast.LENGTH_LONG).show();
           }


       }

       public void NextQuestion()
       {
           if (count>0)
           {
           count = count - 1;
           saveQuestion();

           }
           else
           {
               aptitudesubcateg.setVisibility(View.GONE);
                  temp4optimage.setVisibility(View.GONE);
                  redirecttemplate.setVisibility(View.VISIBLE);

           }

       }

       public void saveQuestion()
       {
           if (response != 0)
           {
            ContentValues values = new ContentValues();
            //  values.put(DBHelper.Q_ID, "a");

                values.put(DBHelper.StudentID,"1" );
                values.put(DBHelper.R_QuestionID,Question_ID);
                values.put(DBHelper.QuestOptionID,String.valueOf(response));

                db = helper.getWritableDatabase();
                db.insert(DBHelper.TABLEResponse, null, values);
                db.close();


                Toast.makeText(this, "Response saved Successfully",
                        Toast.LENGTH_LONG).show();
                  displayquestions();

           }
           else
           {
                Toast.makeText(this, "Please Select an option",
                        Toast.LENGTH_LONG).show();
           }

       }







    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        if (v==btnBegin)
        {
             aptitudesubcateg.setVisibility(View.VISIBLE);
              temp4optimage.setVisibility(View.GONE);

        }       
            if (v== btnaptitude1)
            {               
                      getcount("1", "1");
                    //  displayquestions();        

            }

            if (v== btnaptitude2)
            {
                  getcount("1", "2");
                  displayquestions();

            }

            if (v== btnaptitude3)
            {
                  getcount("1", "3");
                //  displayquestions();


            }

            if (v== btnaptitude4)
            {

                 getcount("1", "4");
            //   displayquestions();
            }

            if (v== btnaptitude5)
            {

                 getcount("1", "5");
            //   displayquestions();
            }

            if (v== btnnext)
            {
                NextQuestion();
            }

            if (v==btnredirect)
            {
                  aptitudesubcateg.setVisibility(View.VISIBLE);
                  temp4optimage.setVisibility(View.GONE);
                  redirecttemplate.setVisibility(View.GONE);
            }


        }



    }

我的设计

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back" >

    <TextView
        android:id="@+id/tvInstructionsAptitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tvQuestionTextTemplate4Image"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/TextView01"
        android:layout_marginTop="93dp"
        android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam nibh ex, elementum non bibendum ac, consequat a sem. Proin aliquet arcu id lacus interdum, sed fermentum neque sollicitudin. Vestibulum mauris massa, vulputate tincidunt quam vel, egestas tincidunt nisi. Ut ut nulla sagittis, aliquet lectus vitae, pretium nisi. Duis maximus, magna vitae ultricies consectetur, ex felis congue turpis, id scelerisque nisl ex at turpis. Aenean dui sapien, euismod at sem non, rhoncus molestie urna. Mauris condimentum risus felis, nec iaculis orci accumsan nec. Vivamus pharetra ultricies quam a aliquam. Praesent facilisis turpis malesuada massa interdum consequat. In hac habitasse platea dictumst. Integer efficitur nibh risus, ac mattis mi porta ut. Nam leo ex, pulvinar eu orci vel, pretium maximus velit. Pellentesque rhoncus sapien felis, in cursus eros malesuada imperdiet."
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/tvQuestionTextTemplate4Image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="53dp"
        android:layout_marginTop="40dp"
        android:text="Instructions"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvQuestionTextTemplate4Image"
        android:layout_alignBottom="@+id/tvQuestionTextTemplate4Image"
        android:layout_alignParentRight="true"
        android:layout_marginRight="36dp"
        android:text="Time : 10 Mins"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/btnBeginAptitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tvInstructionsAptitude"
        android:layout_alignRight="@+id/tvInstructionsAptitude"
        android:layout_below="@+id/tvInstructionsAptitude"
        android:layout_marginTop="42dp"
        android:text="Begin" />

    <include
        android:id="@+id/aptitudesubcateg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        layout="@layout/aptitudesubcategory" />

    <include
        android:id="@+id/temp4optimage"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        layout="@layout/template4optionsimage" />

      <include
        android:id="@+id/redirecttemplate"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        layout="@layout/redirecttoaptitudesubmodule" />


</RelativeLayout>

不是重定向,而是替换对吧? - Anoop M Maddasseri
是的,它不应该重定向...如果我在屏幕上点击空白处,它会替换为子类别页面... - Tushar Narang
正如您所看到的,我已经包含了一些<include>标签。 - Tushar Narang
好的...在我的端上运行良好...请尝试一下。 - Tushar Narang
你能在 onClick() 中检查一下是哪个 case 被调用了吗?我想要理解当你点击“除按钮以外的任何地方”时,哪个布局被替换了。 - Darpan
3个回答

1

我曾经遇到过这样一个错误,即在片段B的空白处单击会引起底层片段A上的onClick事件。你的问题听起来与我的类似,所以我猜测你正在点击其中一个已包含但不可见布局的“隐形”按钮。

因此,请尝试将以下内容添加到父RelativeLayout中:

android:clickable="true"

1

原因:这是因为您之前的屏幕在子父级别上有触摸/点击监听器,当您的视图没有其中之一时,它会将该事件传递给父/超级视图。

解决方案有很多,

1)在当前活动/片段的父视图中添加行android:clickable="true"

2)在当前活动/片段的onCreate()中添加下面的代码

 root.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

3) 在您的视图的父布局中添加 android:onClick=temp,并在您的类中创建一个 temp(View v) 方法。

4) 如果它是一个片段,则在转换commit()之前添加此行 .addToBackStack(null)


1
尝试在onCreate()方法中调用除按钮外视图的setEnable(false)和/或setClickable(false)方法。但最重要的是,您应该检查id而不是直接检查视图:
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    int id = v.getId();
    switch(id){
        case R.id.btnaptitude1Id:
        ...
        break;
        case R.id.btn1:
        ...
    }

如果您不喜欢该标识符,至少应使用“equals()”方法:
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.equals(btnBegin){
        ...
    }
    if(v.equals(btnaptitude1){
        ...
    }
    ...

看看这个是否有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接