Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ViewPager中复制当前文本视图中的文本_Java_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Java 如何在ViewPager中复制当前文本视图中的文本

Java 如何在ViewPager中复制当前文本视图中的文本,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,我想在ViewPager中复制当前TextView(片段内)中的文本,但它会复制上一个或下一个TextView中的文本。我搜索发现,创建三个页面是因为ViewPager的正常行为:上一页、当前页和下一页。但我找不到如何轻松确定当前的一个 我使用带有FragmentStatePagerAdapter的ViewPager 编辑: 我已经搜索了两天,但在问了我的问题后,我发现了几乎相同的问题: 这是一个比我的提问和解释更好的问题。至少我学会了如何提问和解释 但是“getUserVisibleHint

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

我使用带有FragmentStatePagerAdapter的ViewPager

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

但是“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);
    }
});

经过大量的搜索,我不知道有多少尝试和错误,我找到了解决我的问题的办法

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

@Override
public boolean onContextItemSelected(MenuItem item) {

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

// this is not working
text = tvTextView.getText().toString();
然后,我尝试为fragment创建setText和getText方法,并使用getText方法在onContextItemSelected方法中获取文本。它工作得很好

首先,我为片段添加了两种方法:

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()”方法都是这样工作的。我希望这能帮助其他人