2017-11-16 11 views
0

RowViewListAdapterに入れてListViewにバインドした後、問題が発生しています。 ListViewに登録されているItemClickイベントがあります。クリックすると、DetailViewが開かれると思います。しかし、ListViewアイテムをクリックしても何も起こらないので、私のクリックイベントが上書きされているようです。ここでカスタムのRowViewを膨張させると、ListViewのクリックイベントがオーバーライドされますか?

ListViewを使用していますExplorerActivityクラスのサンプルです:

protected override void OnCreate(Bundle savedInstanceState) 
{ 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.ExplorerView); 

     exampleListView = FindViewById<ListView>(Resource.Id.exampleListView); 

     string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), 
           "TestDb.db3"); 

     SQLiteConnection myConn = new SQLiteConnection(dbPath);     

     allItems = dbHelper.GetAllItems(); 

     exampleListView.Adapter = new exampleListAdapter(this, allItems); 

     exampleListView.ItemClick += exampleListView_ItemClick; 
} 

サンプルListAdapterコード:

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    var item = items[position]; 

    if (convertView == null) 
    { 
     convertView = context.LayoutInflater.Inflate(Resource.Layout.CustomRowView, null); 
    } 

    convertView.FindViewById<TextView>(Resource.Id.ItemTextView).Text = item.Name; 

} 

私はカスタムRowViewを膨らませる場合、私は「クリックイベントを失うんListViewの商品に登録されていますか?私はListAdapterのカスタムRowView全体にイベントを追加できませんでしたので、ListView.ItemClickイベントと想定しました。

ListViewのクリックイベントはカスタムで無視されますかRowViewRowViewの各インスタンスはまだListViewの項目ですが、正しいですか?

私は適切なオブジェクトを見つけることができません。 RowViewは事ではないので、私のカスタムを膨らませた後に、ListViewのアイテムをイベントにバインドするにはどうすればいいですか?RowView

エクスプローラのアクティビティにブレークポイントを設定しようとしましたが、決してヒットしません。そのため、イベントはもはやListView_ItemClickに登録されていません。

答えて

1

カスタムRowViewを膨らませると、ListViewアイテムに登録したクリックイベントが失われますか?

いいえ、アイテムクリックイベントはListViewになりません。アイテムクリックイベントが正しくトリガーされるはずです。

カスタムRowViewではListViewのクリックイベントは無視されますか? RowViewの各インスタンスはまだListView項目ですが、正しいですか?

私はテストのための基本的なデモを行いました。アイテムのクリックイベントは正しくトリガーされます。あなたは私のデモを試すことができますhere

私は適切なオブジェクトを見つけることができません。 RowViewは事ではないので、私のカスタムRowViewを膨らませた後にListView項目をイベントにバインドするにはどうすればいいですか?

1つの方法は、アイテムクリックイベントをListViewにバインドすることです。他の方法は、膨張したビューにイベントをクリックしてバインドすることです:

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    var item = mList[position]; 

    if (convertView == null) 
    { 
     convertView = mContext.LayoutInflater.Inflate(Resource.Layout.CustomRowView,null); 
    } 
    var btn = convertView.FindViewById<Button>(Resource.Id.mBtn); 
    btn.Click += Btn_Click; 
    return convertView; 
} 

private void Btn_Click(object sender, EventArgs e) 
{ 
    //do your job here 
} 

アップデート:ボタンが行ビューに追加されると問題が、ボタンの上にある

ItemClickは動作しません。 。あなたはItemClickが仕事をしたい場合は、以下のようなすべてのボタンにandroid:focusable="false"android:focusableInTouchMode="false"を追加する必要があります。

<Button 
    android:id="@+id/btnClick" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:text="Click Me"/> 
+0

私はこの夜、あなたの例を歩くとどんな質問で応答します。ありがとうございました! –

+0

私はあなたのデモをダウンロードし、コードを歩きました。あなたは私の期待通りにコードを作っていますが、私はそうではありません。クリックイベントは登録されていません。ここにプロジェクトがあります:https://github.com/jmbarnes1987/Namely私のプロジェクトを見て、私が間違っていることを教えてください、本当に感謝します。 –

+0

他のすべてのコントロールをRowViewに追加することは可能ですか?画像、textviews、ボタンなど、実際に行をクリックすることは不可能になっていますか?その理論の問題は、私はあなたの例のテキストをクリックすることができ、それはまだ動作します。 –

関連する問題