0

まず、これはかなり長い投稿であることが判明したので、それほど難しくはないのでご容赦ください。ただし、正しく説明していない場合は、何かを明確にする必要があるかもしれません。先日、このフォーラムの人たちの助けを借りて、「mapClass」クラスを部分的に設定することができましたが、問題があり、正しく実行されていないので、可能であれば助けを求めています。ご覧いただけるように、以下のコードを投稿します。

私が持っているのは、アイテムの配列のlistViewを設定する「Dundrum」クラスです。

次に、iveは'dundrumSelector'クラスを取得しました。これを使用して、listItemsにsetOnClickListener()メソッドを設定し、それらを正しいビューにリンクします。

これは私のDUNDDRUMセレクタークラスです...

    public static final int BUTTON1 = R.id.anandaAddressButton;
public static final int BUTTON2 = R.id.bramblesCafeAddressButton;
public static final int BUTTON3 = R.id.brannigansAddressButton;

public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);

    int position = getIntent().getExtras().getInt("position");

    if(position == 0){
        setContentView(R.layout.ananda);
    };
    if(position == 1){
        setContentView(R.layout.bramblescafe);
    };
    if(position == 2){
        setContentView(R.layout.brannigans);
Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
anandabutton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        myIntent.putExtra("button", BUTTON1);
        startActivityForResult(myIntent,0);

    }

});

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        Intent myIntent = new Intent(view.getContext(),MapClass.class);
        myIntent.putExtra("button", BUTTON2);
        startActivityForResult(myIntent, 0);
    }

});

などなど...

次に、このクラスの上部に表示されるボタンを表す静的intを設定しました。これは、mapClassアクティビティで、1つのメソッドが必要なためです。これは、変化するのは1つだけだからです。各場所への座標。すなわち。メソッドへの異なる座標以外は基本的に同じことを行う100以上のマップクラスを持ちたくありません。

だから私のマップクラスは次のとおりです...

case DundrumSelector.BUTTON1:
        handleCoordinates("53.288719","-6.241179");
        break;
    case DundrumSelector.BUTTON2:
        handleCoordinates("53.288719","-6.241179");
        break;
    case DundrumSelector.BUTTON3:
        handleCoordinates("53.288719","-6.241179");
        break;
    }
}




private void handleCoordinates(String l, String b){


    mapView = (MapView) findViewById(R.id.mapView);
    LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
    View zoomView = mapView.getZoomControls();

    zoomLayout.addView(zoomView,
            new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, 
                LayoutParams.WRAP_CONTENT)); 
        mapView.displayZoomControls(true);

    mc = mapView.getController();
    String coordinates[] = {l, b};
    double lat = Double.parseDouble(coordinates[0]);
    double lng = Double.parseDouble(coordinates[1]);

    p = new GeoPoint(
            (int) (lat*1E6),
            (int) (lng*1E6));

    mc.animateTo(p);
    mc.setZoom(17);
    mapView.invalidate();


}

これが私の問題です。onClick()イベントは、listViewからは機能せず、正しいビューに入ります。ビューに入る前に、「DundrumSelector」のメソッドをコメントアウトする必要があります。

そして、これは私が理解していないことです。まず、onClick()イベントが機能しないのは、マップがある次のビューでも機能しないためです。

これは非常に長い投稿であり、かなり混乱する可能性があることを知っています。説明が必要な場合はお知らせください。

要約すると、私がやろうとしているのは、「mapClass」でやろうとしていることのように、マップ座標を設定するクラスを1つだけ持つことです。

誰かがこれを行うための別の方法を助けたり提案したりできますか?これを読んでくれてありがとう。

4

1 に答える 1

0

問題は次のとおりです。

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);
bramblesbutton.setOnClickListener(new View.OnClickListener() {

ここでは、onClickListenerを、位置2にいて、正しいsetContentView()メソッドを呼び出した場合にのみ使用できるボタンに設定しようとします。別のコンテンツとしてのビュー(ボタンが含まれていない)がある場合は、

Button bramblesbutton = (Button) findViewById(R.id.bramblesCafeAddressButton);

nullを返し、次の行にNullPointerExceptionがあります。したがって、対応するレイアウトも使用している場合にのみ、このonClickListenerを追加する必要があります。

そして、はい、コメントアウトすると機能します。それは、nullでメソッドを呼び出そうとしないためです。ただし、その一方で、コメントアウトすると、クリックが登録されないため、続行されません。

それをさらに明確にするために:

通過位置が0の場合、次のContentViewを設定しています。

if(position == 0){
        setContentView(R.layout.ananda);
    };

したがって、他の2つのボタンはこのレイアウトアナダには含まれないと思います。したがって、それらにClickListenerを割り当てると、NullPointerExceptionがスローされます。

この問題を解決するために、そしてこの3つの異なるレイアウトが本当に必要な場合は、そのようにします(最初のボタンの例)。

if(position == 0){
        setContentView(R.layout.ananda);
        Button anandabutton = (Button) findViewById(R.id.anandaAddressButton);
        anandabutton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
               Intent myIntent = new Intent(view.getContext(),MapClass.class);
               myIntent.putExtra("button", BUTTON1);
               startActivityForResult(myIntent,0);
            }
        });
}
于 2010-05-30T21:48:46.637 に答える