简体   繁体   中英

Using Text Only Once Through Random Method

I am new to Android. I am showing Text in the TextView on Button click Randomly. On 1st Textview the Heading and on 2nd the explaination of that heading. I am able to show the Heading and Explaination Randomly and now I want if the Text is shown once should not be shown again means it will be removed. This is the point where I stuck. I am not able to remove the texts. Any help will be appreciated. I am posting my code here.

MainActivity.java

TextView text_heading,text_explain;
Button click;
Random random;
Integer [] array_heading ,array_explain ;
Integer int_text;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    text_heading = (TextView) findViewById(R.id.text_heading);
    text_explain = (TextView) findViewById(R.id.text_explain);
    click = (Button) findViewById(R.id.click);

    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            text_heading.setText(array_heading.get(int_text)); //getting error
            text_explain(array_explain.get(int_text)); //getting error
            array_heading.remove(int_text); //getting error
            array_explain.remove(int_text); //getting error
        }
    });

    random = new Random();

    array_heading  = new Integer []{R.string.source_text1, R.string.source_text2, R.string.source_text3,
            R.string.source_text6, R.string.source_text5, R.string.source_text4, R.string.source_text7,
            R.string.source_text8, R.string.source_text9};

    array_explain = new Integer []{R.string.source_text1_explain, R.string.source_text2_explain,
            R.string.source_text3_explain,
            R.string.source_text4_explain, R.string.source_text5_explain, R.string.source_text6_explain,
            R.string.source_text7_explain,
            R.string.source_text8_explain, R.string.source_text9_explain};

    ArrayList<Integer> array_headingList = new ArrayList<Integer>(Arrays.asList(array_heading));

    ArrayList<Integer>array_explainList = new ArrayList<Integer>(Arrays.asList(array_explain));


    int_text = random.nextInt(array_headingList.size() - 1);
}
   }

I am not able to remove the texts. Any help will be appreciated. I am posting my code here.

To clean the content of the TextView you could pass null to setText . Eg

text_heading.setText(null);

If you want to change the content every time you click on the button, you have to move

int_text = random.nextInt(array_heading.length);

your onClick callback,

You should be aware of the fact that next int returns an int between [0, n) . array_heading.length -1 is necessary only if you want to exclude R.string.source_text9_explain from the possible texts you want to show. Keep also in mind that if array_heading contains more items than array_explain you could get ArrayIndexOutBoundException

You must use ArrayList for it.

ArrayList<Integer> heading = Arrays.asList(array_heading);
ArrayList<Integer> explain = Arrays.asList(array_explain);

Now set text from this arraylists. And when its set once remove it from the arraylist so it cannot be shown again.

Use like this

random = new Random();

array_heading  = new Integer []{R.string.source_text1, R.string.source_text2, R.string.source_text3,
        R.string.source_text6, R.string.source_text5, R.string.source_text4, R.string.source_text7,
        R.string.source_text8, R.string.source_text9};

array_explain = new Integer []{R.string.source_text1_explain, R.string.source_text2_explain,
        R.string.source_text3_explain,
        R.string.source_text4_explain, R.string.source_text5_explain, R.string.source_text6_explain,
        R.string.source_text7_explain,
        R.string.source_text8_explain, R.string.source_text9_explain};

ArrayList<Integer> array_headingList = new ArrayList<Integer>(Arrays.asList(array_heading));

ArrayList<Integer> array_explainList = new ArrayList<Integer>(Arrays.asList(array_explain));

int_text = random.nextInt(array_headingList.size());

click.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        text_heading.setText(array_headingList.get(int_text)); 
        text_explain.setText(array_explainList.get(int_text)); 
        array_headingList.remove(int_text); 
        array_explainList.remove(int_text);
        if(array_headingList.size() == 0){
          click.setEnabled(false);
          Toast.makeText(getApplicationContext(),"All text finished",Toast.LENGTH_SHORT).show();
        } else if(array_headingList.size() == 1){
        int_text = 0;
        } else {
         int_text = random.nextInt(array_headingList.size());
        }
    }
});
TextView text_heading,text_explain;
Button click;
Random random;
Integer [] array_heading ,array_explain ;
Integer int_text;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    text_heading = (TextView) findViewById(R.id.text_heading);
    text_explain = (TextView) findViewById(R.id.text_explain);
    click = (Button) findViewById(R.id.click);

    random = new Random();

    array_heading  = new Integer []{R.string.source_text1, R.string.source_text2, R.string.source_text3,
            R.string.source_text6, R.string.source_text5, R.string.source_text4, R.string.source_text7,
            R.string.source_text8, R.string.source_text9};

    array_explain = new Integer []{R.string.source_text1_explain, R.string.source_text2_explain,
            R.string.source_text3_explain,
            R.string.source_text4_explain, R.string.source_text5_explain, R.string.source_text6_explain,
            R.string.source_text7_explain,
            R.string.source_text8_explain, R.string.source_text9_explain};

    ArrayList<Integer> array_headingList = new ArrayList<Integer>(Arrays.asList(array_heading));

    ArrayList<Integer> array_explainList = new ArrayList<Integer>(Arrays.asList(array_explain));


    int_text = random.nextInt(array_headingList.size() - 1);

    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            text_heading.setText(array_headingList.get(int_text)); //getting error
            text_explain.setText(array_explainList.get(int_text)); //getting error
            array_headingList.remove(int_text); //getting error
            array_explainList.remove(int_text); //getting error
        }
    });

}
   }

I would keep the strings together in an object:

public class Item {
    private final int textId;
    private final int textExplanationId;

    public class Item(int textId, int textExplanationId){
        this.textId = textId;
        this.textExplanationId = textExplanationId;
    }

    public int getTextId(){return textId;}
    public int getTextExplanationId(){return textExplanationId;}
}

Then I would store those in an ArrayList :

List<Item> items = new ArrayList<Item>(new Item[]{
     new Item(R.string.source_text1, R.string.source_text1_explain),
     new Item(R.string.source_text2, R.string.source_text2_explain),
      //etc
     });

Then I would shuffle that array once :

Collections.shuffle(items);

And read from it in order:

Item current = items.get(currentIndex++);
text_heading.setText(current.getTextId());
text_explain.setText(current.getTextExplanationId());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM