2

私はforループを実行しており、インテントを開始してソースと同様にURLをパラメーターとして渡したいので、クリック可能にする必要があるTextViewを生成しています。

だから、私はこれを試しました

articleURL[i].setPaintFlags(articleURL[i].getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
articleURL[i].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //System.out.println(articleURL[v.getId()].getText().toString());
        System.out.println(v.getId());
    }
});

私が遭遇する問題は、v.getId() が常に 0 であることです。そして、コメント付きのコードを使用すると

System.out.println(articleURL[v.getId()].getText().toString()); 

私は言う例外を受け取ります

java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1

クリックした TextView のコンテンツが必要なだけです。どうすれば正確に取得できますか?articleURL[i] は、彼が i を知らないため機能しません。v.getId() を常に -1 にするにはどうすればよいですか? どちらをクリックしてもかまいませんか?

これは完全な for ループです

TextView articleURL = new TextView[hashMapSize];
for (int i = 0; i < hashMapSize; i++) {
    articleURL[i] = new TextView(getActivity());
    articleURL[i].setPaintFlags(articleURL[i].getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    articleURL[i].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println(articleURL[v.getId()].getText().toString());
            //System.out.println(v.getId());
        }
    });
}
4

3 に答える 3

10

実際には、パラメーターでビューを取得します。TextView にキャストして呼び出すだけですgetText()

public void onClick(View v) {
  Log.d("text",((TextView) v).getText().toString());
}

も使用しないでくださいSystem.out.println。これは Android であり、デスクトップ Java ではなく、Android のコーディングは通常の Java との大きな違いです。Android に関する本を入手して読む必要があります。そうしないと、アプリがすぐにクラッシュし始め、修正する機会がなくなります。

于 2013-10-11T09:45:34.880 に答える
0

次のことを試してみてください。

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println(((TextView)v).getText());
    }
};
// ... some loop
articleURL[i].setOnClickListener(listener);

アイテムのインデックスも取得したい場合は、これを試してください:

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.println(v.getTag());
    }
};
// ... some loop
articleURL[i].setTag(i);
articleURL[i].setOnClickListener(listener);
于 2013-10-11T09:48:57.273 に答える
0

これを試して..

これを地球儀として使う

TextView articleURL[];

そして、以下のように articleURL を初期化します

articleURL = new TextView[hashMapSize];

そして、フラグメントを拡張する場合は、以下を使用することを意味します

articleURL[i]   = new TextView(getActivity());

活動手段を拡張する

articleURL[i]   = new TextView(this);

System.out.println(((TextView)v).getText().toString());
于 2013-10-11T09:50:49.247 に答える