0

文字列配列といくつかの画像を取り込んでテキストビュー スタイルで表示するクリック可能なリストビューを作成しようとしています。これまでのところ、文字列と画像のそれぞれでリストビューを作成できましたが、テキストビューをクリックして新しいアクティビティなどを開始できるようにするために onClick メソッドを使用する方法がわかりません。

これまでのコードは次のとおりです(XMLを除く):

public class MySimpleArrayAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;

    public MySimpleArrayAdapter(Context context, String[] values) {
    super(context, R.layout.activity_test2, values);
    this.context = context;
    this.values = values;
}

    /* Print a toast when a list item is clicked, don't know what to do */
 public void onClick() {
    switch (list item) {
    case 0:
        Toast.makeText(this.context, "Pressed!", Toast.LENGTH_LONG).show()
        break;
    }
            case 1:
                    etc....

} 

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.activity_test2, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);

    String s = values[position];
    if (s.startsWith("Report a Road Delay")) {
        imageView.setImageResource(R.drawable.ic_menu_compose);
    } else if (s.startsWith("View Reported Delays")) {
        imageView.setImageResource(R.drawable.ic_menu_view);
    } else if (s.startsWith("Search a Road for Delays")) {
        imageView.setImageResource(R.drawable.ic_menu_search);
    } else if (s.startsWith("Update a Delay Report")) {
        imageView.setImageResource(R.drawable.ic_menu_edit);
    } else if (s.startsWith("Validate a Delay Report")) {
        imageView.setImageResource(R.drawable.ic_menu_mark);

    }
    return rowView;
  }
}

 public class MainActivity extends ListActivity {
public void onCreate(Bundle SavedInstanceState) {
    super.onCreate(SavedInstanceState);
    String[] values = new String[] { "Report a Road Delay",
            "View Reported Delays", "Search a Road for Delays",
            "Update a Delay Report", "Validate a Delay Report" };
    MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, values);
    setListAdapter(adapter);

}

 }

これまでの様子は次のとおりです。

ここに画像の説明を入力

私が基本的に理解していないのは onClick メソッドだけです。どのようなパラメータが必要か、どの項目がクリックされたかを判断する方法。どんな助けでも大歓迎です。

4

3 に答える 3

3

これを試して:

ListView list1 = getListView();

list1.setOnItemClickListener(
        new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> arg0, View view,
                    int position, long id) {

                         //Take action here.
                 }
            }
);
于 2013-01-15T15:45:24.970 に答える
2

OnClickListenerではなくOnItemClickListenerを探しています

 lv.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {   
         // DO SOMETHING WITH CICK EVENT HERE
    }
 }

ここで、パラメーターについてのみ説明します。

parent   The AdapterView where the click happened.
view     The view within the AdapterView that was clicked
position The position of the view in the adapter.
id       The row id of the item that was clicked.

Androidリファレンスから最後の部分を取得しました

于 2013-01-15T15:37:09.670 に答える
1

次のコードを使用できます。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> parentAdapter, View view, int position,
                long id) {


            // We know the View is a <extView so we can cast it
            TextView clickedView = (TextView) view;

            Toast.makeText(MainActivity.this, "Item with id ["+id+"] - Position ["+position+"] - Planet ["+clickedView.getText()+"]", Toast.LENGTH_SHORT).show();

        }
       });

      // we register for the contextmneu        
      registerForContextMenu(lv);
    }

ここで、lv は listView です。コンテキスト メニューを追加する場合:

   // We want to create a context Menu when the user long click on an item
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {

    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) menuInfo;

    // We know that each row in the adapter is a Map
    Planet planet =  aAdpt.getItem(aInfo.position);

    menu.setHeaderTitle("Options for " + planet.getName());
    menu.add(1, 1, 1, "Details");
    menu.add(1, 2, 2, "Delete");

}




// This method is called when user selects an Item in the Context menu
@Override
public boolean onContextItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) item.getMenuInfo();
    planetsList.remove(aInfo.position);
    aAdpt.notifyDataSetChanged();
    return true;
}

詳細については、こちらこちらのブログをご覧ください。

于 2013-01-15T15:47:28.663 に答える