【问题标题】:How to copy the text in the current TextView in ViewPager如何在 ViewPager 中复制当前 TextView 中的文本
【发布时间】:2017-12-15 02:32:31
【问题描述】:

我想在 ViewPager 中复制当前 TextView(片段内)中的文本,但它复制了上一个或下一个 TextView 中的文本。我搜索发现是因为ViewPager的正常行为创建了三个页面:上一页、当前页和下一页。但是我找不到如何轻松确定当前的?

我将 ViewPager 与 FragmentStatePagerAdapter 一起使用。

编辑: 我已经搜索了两天,但在问了我的问题后,我发现了几乎相同的问题: 这是一个比我更好的提问和解释的问题。至少我学会了如何提问和解释。

Wrong fragment in ViewPager receives onContextItemSelected call

但是“getUserVisibleHint()”答案对我不起作用?

...Fragment.java

    onCreateView
     .........
    tvTextView = (TextView) v.findViewById(R.id.TextView);
    tvTextView.setTextSize( TypedValue.COMPLEX_UNIT_PX, boyut);
    registerForContextMenu(TextView);
    .....

@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, view, menuInfo);
    if (view.getId()== R.id.tvTextView) {
        MenuInflater inflater = getActivity().getMenuInflater();
        inflater.inflate(R.menu.menu_context, menu);

        menu.setHeaderTitle("Copy...");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {

    if( getUserVisibleHint() == false )
    {
        return false;
    }

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
        case R.id.copy:
            copy();

            return true;
        default:

            return true;
    }
}

在..FragmentContainer.java中

....

mViewPager = (ViewPager) findViewById(R.id.viewPagerLayout);      

FragmentManager fm = getSupportFragmentManager();
mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) {

    @Override
    public int getCount() {
        return myArray.size();
    }

    @Override
    public Fragment getItem(int pos) {

        return ...Fragment.newInstance(name, pos, checkedItems, fontsize);
    }
});

【问题讨论】:

    标签: java android android-fragments android-viewpager


    【解决方案1】:

    经过大量搜索,我不知道经过多少次反复试验,我找到了解决问题的方法。

    使用“getUserVisibleHint()”或“getGroupId()”方法,我无法获取当前文本视图的文本。 我使用了“text = tvTextView.getText().toString();”在 onContextItemSelected 或 onCreateView 方法中,但它不起作用。

    @Override
    public boolean onContextItemSelected(MenuItem item) {
    
        if( ! getUserVisibleHint() )
        {
            return false;
        }
    
    // this is not working
    text = tvTextView.getText().toString();
    

    然后我尝试为片段制作 setText 和 getText 方法,并使用 getText 方法在 onContextItemSelected 方法中获取文本。效果很好!

    首先我在 Fragment 中添加了两个方法:

    public String getText() {
        return mText;
    }
    
    public void setText(String text) {
        mText = text;
    }
    

    在 onCreateView 中我设置了文本

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup parent,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment, parent, false);
    
        tvTextView = (TextView) v.findViewById(R.id.tvTextView);
        registerForContextMenu(tvTextView);
    
        String tvText =  tvTextView.getText().toString();
    
    // I set the text
        setText(tvText);
    

    然后在 onContextItemSelected 我使用 getText 得到它

    @Override
    public boolean onContextItemSelected(MenuItem item) {
    
        if( ! getUserVisibleHint() )
        {
            return false;
        }
    
    // I get the text
        mCopyText =  getText();
    

    “getUserVisibleHint()”或“getGroupId()”方法在这种情况下效果很好。我希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多