Android TextView操作栏的工作方式不一致

时间:2014-12-02 04:01:00

标签: java android textview contextual-action-bar

我有一个关于研究神圣印度文本的应用程序,通常包括这节经文的一节经文和一篇评论。 要打开它,我使用DisplayText活动,当用户从一节经文或其评论中选择一些文本时,该活动会弹出一个ActionBar。

我的问题是它的工作方式不一致 - 在我的三星Galaxy Note 2上工作正常,但是在sony xperia Z2上,一旦我尝试触摸操作按钮,它就会退出操作栏并且没有任何反应。

三星Android版本为4.4.2,索尼版本为4.4.4

请查看非常简短video for Sony device以及how it works for samsung device 请注意,LogCat视图中没有显示错误消息。

我很感激有关如何解决这个问题的任何建议 此外,任何获得解决方法的方法都会受到高度赞赏。

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //Log.v("DEBUG", "DisplaTEXT onCreate - Starting Activity");
        try
        {
             m_context=this;
         mtxtTransl2View.setCustomSelectionActionModeCallback(new CustomTextSelectCallback(mtxtTransl2View, false));
                     mtxtComment.setCustomSelectionActionModeCallback(new CustomTextSelectCallback(mtxtComment, true));

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }


@SuppressLint("NewApi")
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
class CustomTextSelectCallback implements ActionMode.Callback {
    public CustomTextSelectCallback(TextView tv, boolean b) {
        mTextView=tv;
        mbPurport=b;
    }

    //flag that selection is made in the purport, otherwise it is in shloka or translit

    private TextView mTextView;
    private boolean mbPurport;


    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        //Log.d(TAG, "onCreateActionMode");
        //if(mbPurport)
        { 
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.text_selection_menu, menu);

            MenuItem item = menu.findItem(R.id.cab_menu_fb);
            ShareActionProvider actionProvider = (ShareActionProvider)item.getActionProvider();

            actionProvider.setShareIntent(createShareIntent());             

            actionProvider.setOnShareTargetSelectedListener(new OnShareTargetSelectedListener(){
                public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) 
                {

                    try
                    {
                        getShareSubject("Share Subject","Please describe why would you like to share this (optional):");
                    }

                    catch(Throwable e)
                    {
                        String err="Error11: " + e.getMessage();
                        Toast.makeText(getApplicationContext(), err, Toast.LENGTH_LONG).show();
                    }       

                    if(mShareSubj.equals(SUBJ_CANCEL)) return false;

                    int start = mTextView.getSelectionStart();
                    int end = mTextView.getSelectionEnd();          
                    int tvID=mTextView.getId();
                    String sPlaceType = (tvID==R.id.textTransl2) ? "t":"p";
                    mTextURL=mTextURL+"?t="+sPlaceType+"&s="+start+"&e="+end;

                    mANText=mTextView.getText().subSequence(start, end).toString();

                    if ("com.facebook.katana".equals(intent.getComponent().getPackageName()) ) 
                    {
                        //mfacebooksharer.shareStatus(subject, text);
                        // Toast.makeText(this, "Facebook sharing", Toast.LENGTH_LONG).show();
                        shareOnFacebook();
                        return false;
                    }
                    else
                    {
                        if(!MyApp.mC.hasFlag(Cookies.FL_Sharing, m_context))   
                            return true;
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.putExtra(android.content.Intent.EXTRA_TEXT,   getShareBody(intent));
                        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, mShareSubj);

                        getApplicationContext().startActivity(intent);

                        return true;
                    }


                }

            });
        }

        return true;
    }

    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

        return false;
    }

    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        //Log.d(TAG, String.format("onActionItemClicked item=%s/%d", item.toString(), item.getItemId()));

        int start = mTextView.getSelectionStart();
        int end = mTextView.getSelectionEnd();
        long note_id=-1;

        mANPlace=UserDataSQLHelper.NOTE_PLACE_TEXT;
        mANText=mTextView.getText().subSequence(start, end).toString();
        if(mbPurport) 
            mANPlace=UserDataSQLHelper.NOTE_PLACE_COMM;

        mANStartPos=start; 
        mANEndPos=end;
        mScrollPos = mScrollT.getScrollY();

        switch(item.getItemId()) {

        case R.id.cab_menu_fav:

            if(!MyApp.mC.hasFlag(Cookies.FL_TextHighlight, m_context)) return false;

            note_id=MyApp.mUserDB.addNote(m_dbtype, m_dblang, mCurrBookID, mCurrSong, mCurrChapterNum, mCurrTextNum, mRowID, UserDataSQLHelper.NOTE_TYPE_HIGHL, mANPlace, start, end, mScrollPos,
                    mANText, "", "");

            break;
        case R.id.cab_menu_comment: 
            if(!MyApp.mC.hasFlag(Cookies.FL_TextHighlightAddCommentsQuestions, m_context)) return false;

            Intent intent = new Intent(getApplicationContext(), NoteEditor.class);
            intent.putExtra("NOTEEDIT_ACTION", NoteEditor.ACTION_ADD);
            intent.putExtra("NOTEEDIT_TITLE", "Add Question or Note");

            startActivityForResult(intent, SUBACT_ADDEDITNOTE);
            break;

        }
        if (note_id!=-1){ 
            ReloadText();
            AddTags(note_id);
        }
        return false;
    }

    public void onDestroyActionMode(ActionMode mode) {
    }
}

文本选择菜单xml代码在这里:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >


       <item
        android:id="@+id/cab_menu_fb"
        android:orderInCategory="10"
        android:showAsAction="always"
        android:icon="@drawable/cab_facebook"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:title="@string/cab_menu_fb"/>

    <item
        android:id="@+id/cab_menu_fav"
        android:orderInCategory="20"
        android:showAsAction="ifRoom"
        android:icon="@drawable/cab_highl"
        android:title="@string/cab_menu_fav"/>


      <item
        android:id="@+id/cab_menu_comment"
        android:orderInCategory="30"
        android:showAsAction="ifRoom"
        android:icon="@drawable/cab_comment"
        android:title="@string/cab_menu_comment"/>

</menu>

0 个答案:

没有答案