簡體   English   中英

需要幫助弄清楚為什么我不能使用自定義ArrayAdapter更改TextView文本

[英]Need help figuring out why I cannot change TextView text using a custom ArrayAdapter

我有一個非常簡單的應用程序:

activity_main.xml中

<RelativeLayout>
    <ListView android:id="@+id/emoticon_listview" />
</RelativeLayout>

item.xml

<TextView />

MainActivity.java

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

    int start = 0x1F004;
    int end = 0x1F65C;

    ListView listView = (ListView)findViewById(R.id.emoticon_listview);
    Integer[] emoticon_array = new Integer[end - start]

    for(int codepoint=start, i=0; codepoint<end; codepoint++, i++){
        emoticon_array[i] = codepoint;
    }

    CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(this, R.layout.item, emoticon_array);
    listView.setAdapter(customArrayAdapter);
}

CustomArrayAdapter.java

public class CustomArrayAdapter extends ArrayAdapter {
    public customArrayAdapter(Context context, int resource, Object[] objects){
        super(context, resource, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        TextView textView = (TextView) convertView;

        if(textView != null){
            textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
            // -or-
            textView.setText("Hello, world!");
            // -or-
            textView.setText("whatever ...");
        }
    }

    return super.getView(position, convertView, parent);
}

問題是,不管我放在textView.setText()的重載的getView()我的CustomArrayAdapter它始終顯示的是在原來emoticon_array。

我什至嘗試了這個:

return super.getView(position, textView, parent);

但這也無濟於事。

我究竟做錯了什么?

謝謝 :)

您正在使用自定義布局R.layout.item因此

  • 您需要在getview中膨脹該布局
  • 找到您的視圖(TextView)並應用更改,然后返回該視圖

     @Override public View getView(int position, View convertView, ViewGroup parent){ TextView textView; if(convertView == null){ convertView = LayoutInflater.from(getContext()).inflate(R.layout.item,parent,false); // to reuse view next time } // find your text view textView = (TextView)convertView.findViewById(R.id.yourTextViewID); textView.setText(getItem(position).toString()); //textView.setText("Hello, world!"); // -or- //textView.setText("whatever ..."); // return inflated view return convertView; } 

注意:請勿使用Object數組,而應使用getItem來獲取position的項,以顯示數組中的項

您應該在自己的getView()方法的開頭調用super.getView()

@Override
public View getView(int position, View convertView, ViewGroup parent){
    TextView textView = (TextView) super.getView(position, convertView, parent);
    textView.setText("Hello, world!");
    // -or-
    textView.setText("whatever ...");

    return textView;
}

如果它不是null這使您可以利用邏輯來回收convertView 然后,您可以進行所需的任何更改,然后直接返回結果視圖。

請注意,我刪除了這一行:

    textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));

首先,它缺少一對括號,這會導致編譯器錯誤。 更重要的是,這樣做會帶來很多好處,而看不到好處。 如果原始文本不是數字,則最終結果是錯誤,或者將文本設置回原始值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM