アクティビティの開始時 (または行のインフレーション時) に非表示に設定されている 4 つのイメージビューがあります。ボタンを押して、それらをすべて表示したいと思います(その後、onclicksとして操作できます...)。次の要約コードがありますが、最後のイメージビュー以外のイメージビューにアクセスしようとすると常にエラーが発生します。
public class xx {
private ImageView up;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Log.i(TAG, "excersizeAdapter getView");
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Excersize e = items.get(position);
if (e != null) {
TextView exTitle = (TextView) v.findViewById(R.id.ex_type_title);
TextView exOn = (TextView) v.findViewById(R.id.ex_on_title);
TextView exRestAmount = (TextView) v.findViewById(R.id.ex_rest_amount);
TextView exSequence = (TextView) v.findViewById(R.id.ex_sequence);
up = (ImageView) v.findViewById(R.id.moveup);
down = (ImageView) v.findViewById(R.id.movedown);
if (exTitle !=null) {
exTitle.setText(e.getTypeTitle());
}
if (exOn !=null) {
exOn.setText("On: "+e.getTypeOn());
}
if (exRestAmount !=null) {
exRestAmount.setText(e.getRestAmount().toString());
}
if (exSequence !=null) {
exSequence.setText(e.getSequence().toString());
up.setTag(8881);
down.setTag(8882);
up.setId(((Integer)e.getSequence()));
down.setId(((Integer)e.getSequence()));
Log.i(TAG, "up,down values=" +e.getSequence());
}
}
return v;
}
}
public void toggleReorderButtons() {
up.findViewById(2).setVisibility(View.VISIBLE);
up.setVisibility(View.VISIBLE);
up.setOnClickListener(this);
}
}
OK、これは短縮されたコードですが、makevisinvis メソッドup.findview...
ではクラッシュが発生し、up.setvis などはアクティビティに最後に追加されたものだけをオンにします。
私も次のことを試しましたが、成功しませんでした。
ImageView upper = (ImageView) up.findViewById(2);
upper.setVisibility(View.VISIBLE);
素敵なエラーダンプ:
04-21 09:10:55.650: W/dalvikvm(22392): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
04-21 09:10:55.675: E/AndroidRuntime(22392): FATAL EXCEPTION: main
04-21 09:10:55.675: E/AndroidRuntime(22392): java.lang.NullPointerException
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.mediabarltd.digittrainer.ProgramDisplay.toggleReorderButtons(ProgramDisplay.java:437)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.mediabarltd.digittrainer.ProgramDisplay.onClick(ProgramDisplay.java:391)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.view.View.performClick(View.java:2538)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.view.View$PerformClick.run(View.java:9152)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Handler.handleCallback(Handler.java:587)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Handler.dispatchMessage(Handler.java:92)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Looper.loop(Looper.java:130)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.app.ActivityThread.main(ActivityThread.java:3691)
04-21 09:10:55.675: E/AndroidRuntime(22392): at java.lang.reflect.Method.invokeNative(Native Method)
04-21 09:10:55.675: E/AndroidRuntime(22392): at java.lang.reflect.Method.invoke(Method.java:507)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
04-21 09:10:55.675: E/AndroidRuntime(22392): at dalvik.system.NativeStart.main(Native Method)
真剣に見て、私がしていたことを完全に作り直す必要がありました。しかし...
基本的に、チュートリアルAndroid ListView and ListActivity に従い、 Android ListView Adapter OnClickListener issueで説明されているきちんとした「トリック」を実装しました。
(私はこれに本当に苦労しています。)