#android #imageview #listactivity
#Android #просмотр изображений #listactivity
Вопрос:
Я создаю ListActivity, в котором есть только изображения в строках. Я уже могу отображать изображения, но когда я пытаюсь щелкнуть по строке, это ничего не дает. Я могу щелкнуть по добавленному изображению, но я хотел бы иметь возможность щелкнуть по всей строке, как при обычном действии списка. Кто-нибудь может сказать мне, как я могу это сделать? Не уверен, почему при возврате кода не отображается моя первая строка, но вот она:
До сих пор не удалось решить эту проблему. Кто-нибудь?
public class AddNote extends ListActivity {
IconAdapter mAdapter;
private Button btnMove;
private Button btnDelete;
private Button btnSave;
private EditText etDescription;
private int iconPos = 0;
private String server;
private String project;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor editor = app_preferences.edit();
setContentView(R.layout.add_note);
mAdapter = new IconAdapter(this);
setListAdapter(mAdapter);
mAdapter.addIcons();
btnMove = (Button) findViewById(R.id.move);
btnDelete = (Button) findViewById(R.id.delete);
btnSave = (Button) findViewById(R.id.save);
etDescription = (EditText) findViewById(R.id.description);
server = app_preferences.getString("server", "none");
project = app_preferences.getString("project", "no project");
btnMove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Move", "Move");
}
});
btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Delete", "Delete");
}
});
btnSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etDescription.getText().toString().trim().equals(""))
Toast.makeText(getApplicationContext(), "Please enter a description", Toast.LENGTH_SHORT).show();
else
{
UUID id = UUID.randomUUID();
saveMapIcon(id, iconPos, etDescription.getText().toString(), "0,0");
}
}
});
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Log.e("Test", "testing....");
iconPos = position;
}
private void saveMapIcon(UUID theID, int position, String description, String location)
{
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = app_preferences.edit();
String mapIcons = app_preferences.getString("mapNotes", "none");
if (mapIcons.equals("none"))
{
mapIcons = server "|" project "|" theID "|" position "|" description "|" location "*";
}
else
{
mapIcons = server "|" project "|" theID "|" position "|" description "|" location "*";
}
Log.e("position:", String.valueOf(position));
editor.putString("idToMove", theID.toString() "|" String.valueOf(position));
editor.putString("mapNotes", mapIcons);
editor.putBoolean("addingIcon", true);
editor.commit();
Log.e("Test", mapIcons);
Intent intent = null;
intent = new Intent(getApplicationContext(), GetMap.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
public class IconAdapter extends BaseAdapter {
private Context mContext;
ArrayList<View> imageViews = new ArrayList<View>();
private Integer[] mIconList = {
R.drawable.symbol1, R.drawable.symbol2, R.drawable.symbol3, R.drawable.symbol4, R.drawable.symbol5};
private ArrayList<Integer> mIcons = new ArrayList<Integer>();
public IconAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mIconList.length;
}
public Object getItem(int position) {
return mIconList[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mIcons.get(position));
return i;
}
public void addIcons() {
for (int i=0; i<mIconList.length; i )
{
mIcons.add(mIconList[i]);
}
notifyDataSetChanged();
}
}
}
Ответ №1:
Millec8,
Эта функциональность потребует от вас переопределения функции onListItemClick()
в вашем ListActivity…
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//your code here
}
Комментарии:
1. Я переопределил onListItemClick (), и он по-прежнему выбирает только изображение. Нужно ли мне отключить фокусировку или возможность выбора где-то еще, чтобы это сработало?
2. хммм, у меня есть пользовательский,
ListView
с 3ImageViews
, и я с этим не сталкивался. не могли бы вы опубликовать свой код дляListActivity
?
Ответ №2:
Кажется, что должен быть более простой способ сделать это, но из аналогичного вопроса, который у меня был с пользовательским ListView, я сделал следующее:
Создайте и замените ImageView новым пользовательским ImageView, что-то в этом роде:
public class NoClickImageView extends ImageView {
@Override
protected void onKeyUp(int keyCode, KeyEvent event) {
return false;
}
@Override
protected void onKeyDown(int keyCode, KeyEvent event) {
return false;
}
@Override
protected void onTouchEvent(MotionEvent event) {
return false;
}
}
В принципе, сделайте его мертвым, где он не будет обрабатывать какие-либо события касания или щелчка. Если вам нужно, чтобы его можно было выбирать, вы можете добавить дополнительные методы, такие как setSelected()
, а затем вызвать их в своем onListItemSelected()
методе. Но я совершенно уверен, что использование вышеупомянутого должно сделать это.
Комментарии:
1. Я заменил ImageView, и он по-прежнему ведет себя таким же образом.
Ответ №3:
В итоге я создал holder в getView () моего ArrayAdapter и загрузил его с помощью ImageView. Я также поместил его в AlertDialog, потому что подозреваю, что у него могли возникнуть проблемы с одновременным отображением списка, а также других элементов графического интерфейса на экране.