2016-12-02 1 views
-1

У меня есть MainActivity, который вызывает фрагмент (ReadStory). ReadStory имеет ViewPager, который использует PagerAdapter. На странице есть изображение и TextView внизу. (Этот пример показывает только TextView)Android: изменить текст в PagerAdapter

Все это хорошо работает.

Существует требование, чтобы, когда пользователь прикасается к TextView, различные слова выделяются красным цветом. Это также хорошо работает.

Проблема заключается в том, что текст (с красными бликами) отображается на следующем экране, а не на текущем видимом экране. Я установил onClickListener в TextView, который устанавливает соответствующие части в красный цвет, а затем устанавливает текст в TextView.

ViewPager загружает текущий экран плюс предыдущий и следующий экраны. TextView привязан к «nextScreen».

Как изменить TextView на текущем экране?

Я искал ответ в течение нескольких дней, но я не могу найти ответ. Любая помощь будет оценена по достоинству.

Мой код - MainActivity

import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

Button myButton; 
ReadStory RS; 

// ********************************************************************************************* 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myButton = (Button) findViewById(R.id.button); 
    myButton.setOnClickListener(textViewClickListener); 

} 

// ********************************************************************************************* 

private View.OnClickListener textViewClickListener = new View.OnClickListener() { 
    public void onClick(View v) { 

     int[] mStory_resources = {R.string.S1P0, R.string.S1P1, R.string.S1P2, R.string.S1P3, R.string.S1P4, R.string.S1P5, R.string.S1P6, R.string.S1P7, 
       R.string.S1P8, R.string.S1P9, R.string.S1P10, R.string.S1P11}; 
     int mStoryWords = R.string.S1words; 

     RS = new ReadStory(); 
     Bundle args = new Bundle(); 
     args.putIntArray("Story", mStory_resources); 
     args.putInt("storyWords", mStoryWords); 
     RS.setArguments(args); 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.addToBackStack("readStory"); 
     ft.replace(R.id.activity_main, RS); 
     ft.commit(); 

    } 
}; 
// ********************************************************************************************* 
} 

ReadStory

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RelativeLayout; 

public class ReadStory extends Fragment { 

static String currentString = ""; 
static String newString = ""; 
private static final String story = "Story"; 
private static final String storyWords = "storyWords"; 
private int[] mStory_resources; 
private int mStory_words; 

ViewPager viewPager; 
CustomSwipeAdapter adapter; 

public ReadStory() { 
    // Required empty public constructor 
} 

// ********************************************************************************************* 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mStory_resources = getArguments().getIntArray(story); 
     mStory_words = getArguments().getInt(storyWords); 
    } 

} 

// ********************************************************************************************* 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    final RelativeLayout parent = (RelativeLayout) inflater.inflate(R.layout.read_story, container, false); 
    viewPager = (ViewPager) parent.findViewById(R.id.view_pager); 
    adapter = new CustomSwipeAdapter(getActivity()); 

    adapter.story_resources = mStory_resources; 
    adapter.story_words = mStory_words; 
    viewPager.setAdapter(adapter); 

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      currentString = getString(mStory_resources[position]); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

    return parent; 

} 

// ********************************************************************************************* 

} 

PagerAdapter

import android.content.Context; 
import android.os.Build; 
import android.support.v4.view.PagerAdapter; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

class CustomSwipeAdapter extends PagerAdapter{ 

int[] story_resources; 
int story_words; 
private TextView textView; 
private Context ctx; 

CustomSwipeAdapter(Context ctx) 
{ 
    this.ctx = ctx; 
} 

// ********************************************************************************************* 

@Override 
public int getCount() { 
    return story_resources.length; 
} 

// ********************************************************************************************* 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return (view==object); 
} 

// ********************************************************************************************* 

@SuppressWarnings("deprecation")      // Put here as setText is deprecated as of API 16 - Jelly_bean 
@Override 
public Object instantiateItem(ViewGroup container, int position) { 

    LayoutInflater layoutInflater; 
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View item_view = layoutInflater.inflate(R.layout.swipe_layout,container,false); 
    textView = (TextView) item_view.findViewById(R.id.image_count); 
    textView.setText(story_resources[position]); 
    textView.setOnClickListener(textViewClickListener); 

    container.addView(item_view); 
    return item_view; 
} 

// ********************************************************************************************* 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 

    container.removeView((RelativeLayout)object); 

} 

// ********************************************************************************************* 

@SuppressWarnings("deprecation")      // Put here as fromHtml is deprecated as of API 24 - N 

private View.OnClickListener textViewClickListener = new View.OnClickListener() { 
    public void onClick(View v) { 

     String patternString = "\\b(" + ctx.getString(story_words) + ")\\b"; 
     Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(ReadStory.currentString); 
     StringBuffer bufStr = new StringBuffer(); 

     while (matcher.find()) { 
      String rep = matcher.group(); 
      matcher.appendReplacement(bufStr, "<font color='#EE0000'>" + rep + "</font>"); 
     } 
     matcher.appendTail(bufStr); 
     ReadStory.newString = bufStr.toString(); 

     int sdk = android.os.Build.VERSION.SDK_INT; 
     if(sdk >= Build.VERSION_CODES.N) { 
      textView.setText(Html.fromHtml(ReadStory.newString)); 
     } else { 
      textView.setText(Html.fromHtml(ReadStory.newString)); 
     } 

     Toast.makeText(ctx, "Clicked", Toast.LENGTH_LONG).show(); 
    } 
}; 

// ********************************************************************************************* 


} 

ответ

1

Использование

((TextView)v).setText(Html.fromHtml(ReadStory.newString)); 

вместо

textView.setText(Html.fromHtml(ReadStory.newString)); 

Существует ссылка проблема TextView объект состоит из ссылки следующего пункта.