Я пробовал все решения, которые нашел здесь, в stackoverflow, но похоже, что ни одно из них не работает.
Вот моя основная деятельность:
public class MerchantLocatorActivity extends AppCompatActivity implements OnMapReadyCallback {
public void init(){
merchantLocatorResponseObject = new MerchantLocatorResponse();
merchantLocatorResponseObject.setTitle("Spherical");
merchantLocatorResponseObject.setAddress("8007 Pioneer St, Kapitolyo, Mandaluyong, 1550 Metro Manila");
merchantLocatorResponseObject.setLatitude( 14.573249);
merchantLocatorResponseObject.setLongitude(121.057022);
merchantLocatorObjectArray.add(merchantLocatorResponseObject);
merchantLocatorResponseObject = new MerchantLocatorResponse();
merchantLocatorResponseObject.setTitle("Globe");
merchantLocatorResponseObject.setAddress("SCT, 584 Shaw Blvd, Mandaluyong, 1552 Metro Manila");
merchantLocatorResponseObject.setLatitude(14.585095);
merchantLocatorResponseObject.setLongitude(121.048893);
merchantLocatorObjectArray.add(merchantLocatorResponseObject);
merchantLocatorResponseObject = new MerchantLocatorResponse();
merchantLocatorResponseObject.setTitle("Sparndium");
merchantLocatorResponseObject.setAddress("Xavier, San Juan, 1502 Metro Manila");
merchantLocatorResponseObject.setLatitude(14.601918);
merchantLocatorResponseObject.setLongitude(121.042169);
merchantLocatorObjectArray.add(merchantLocatorResponseObject);
addMarker();
}
@OnClick(R.id.fab)
public void showAccToDialog() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
View alertView = LayoutInflater.from(this).inflate(R.layout.dialog_biller, null);
alertDialogBuilder.setView(alertView);
final AlertDialog dialog = alertDialogBuilder.create();
dialog.show();
final ListView listViewBillers = (ListView) dialog.findViewById(R.id.biller_institutions_listview);
if (listViewBillers != null) {
MerchantLocatorAdapter adapter = new MerchantLocatorAdapter(
this, R.layout.merchant_locator_adapter, merchantLocatorObjectArray);
listViewBillers.setAdapter(adapter);
listViewBillers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
geoLocate(merchantLocatorObjectArray,position);
DebugUtils.log("TESTTESTACTIVITYZXC");
DebugUtils.showToast(MerchantLocatorActivity.this,"HAHAHAH");
dialog.dismiss();
}
});
final EditText mSearchedittext = (EditText) dialog.findViewById(R.id.search_edittext);
mSearchedittext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
final ArrayList<MerchantLocatorResponse> searchResultObject = new ArrayList<>();
searchResultObject.clear();
for (int hay = 0; hay <= merchantLocatorObjectArray.size() - 1; hay++) {
if ( merchantLocatorObjectArray.get(hay).getTitle().toLowerCase().contains(charSequence)) {
searchResultObject.add( merchantLocatorObjectArray.get(hay));
}
}
MerchantLocatorAdapter adapter = new MerchantLocatorAdapter(
MerchantLocatorActivity.this, R.layout.merchant_locator_adapter, searchResultObject);
listViewBillers.setAdapter(adapter);
listViewBillers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
geoLocate(searchResultObject,position);
dialog.dismiss();
}
});
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
}
}
Я удаляю часть кода, потому что считаю, что в этом нет необходимости, но дайте мне знать, есть ли какая-то часть, требующая пояснения.
В настоящее время в моей основной деятельности я вызываю диалоговое окно, которое содержит представление списка, и в моем представлении списка есть элементы.
Моя проблема в том, что я не могу выбрать ни один из своих элементов, даже если у меня есть прослушиватель setOnitemclick.
вот мой адаптер:
public class MerchantLocatorAdapter extends BaseAdapter {
private int resourceLayout;
private Context mContext;
ArrayList<MerchantLocatorResponse> merchantLocatorarray = new ArrayList<>();
public MerchantLocatorAdapter(Context context, int resource, ArrayList<MerchantLocatorResponse> merchantLocatorResponsesobjectArray) {
this.resourceLayout = resource;
this.mContext = context;
this.merchantLocatorarray = merchantLocatorResponsesobjectArray;
}
@Override
public int getCount() {
return merchantLocatorarray.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(resourceLayout, parent, false);
}
TextView tt1 = (TextView) convertView.findViewById(R.id.field_name_textview);
TextView tt2 = (TextView) convertView.findViewById(R.id.field_value_textview);
ImageButton direction = (ImageButton) convertView.findViewById(R.id.direction);
tt1.setText(merchantLocatorarray.get(position).getTitle());
tt2.setText(merchantLocatorarray.get(position).getAddress());
return convertView;
}
}
вот мой макет для моего адаптера:
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:card_view = "http://schemas.android.com/apk/res-auto"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<android.support.v7.widget.CardView
android:id = "@+id/card_view"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:layout_gravity = "center"
android:layout_margin = "8dp"
android:elevation = "3dp">
<LinearLayout
android:id = "@+id/card_overflow"
android:focusable = "true"
android:clickable = "true"
android:background = "#fff"
android:paddingLeft = "16dp"
android:paddingRight = "0dp"
android:paddingTop = "10dp"
android:paddingBottom = "10dp"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "vertical">
<RelativeLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:weightSum = "1">
<TextView
android:id = "@+id/field_name_textview"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginBottom = "5dp"
android:layout_toLeftOf = "@+id/branch_btns"
android:layout_alignParentLeft = "true"
android:textSize = "17sp"
android:textStyle = "bold"
android:textColor = "@color/edittext_text"
android:text = "test"/>
<LinearLayout
android:id = "@+id/branch_btns"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentRight = "true"
android:orientation = "horizontal"
>
<ImageButton
android:id = "@+id/direction"
android:layout_width = "50sp"
android:layout_height = "wrap_content"
android:src = "@drawable/ic_direction"
android:scaleType = "fitCenter"
android:background = "@color/translucent_clear_bg"
/>
<ImageButton
android:id = "@+id/btn_branch_phone"
android:layout_width = "50sp"
android:layout_height = "wrap_content"
android:src = "@drawable/ic_call_phone"
android:scaleType = "fitCenter"
android:background = "@color/translucent_clear_bg"
/>
</LinearLayout>
</RelativeLayout>
<View
android:id = "@+id/seperator"
android:layout_width = "match_parent"
android:layout_height = "2dp"
android:layout_marginBottom = "5dp"
android:background = "@android:color/darker_gray"
android:visibility = "gone"
android:layout_marginTop = "2dp"/>
<TextView
android:id = "@+id/field_value_textview"
android:textSize = "14sp"
android:textColor = "@color/edittext_tint"
android:layout_marginTop = "5dp"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "test"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Я пробовал все решения, которые нашел здесь, в stackoverflow, но все еще не могу щелкнуть свой элемент. поэтому, пожалуйста, не помечайте это как дубликат.
Если есть какая-то часть кода, требующая разъяснения, оставьте комментарий, и я отвечу как можно скорее. Благодарю.
В макете вашего элемента есть ImageButton, которые обычно блокируют событие щелчка. Попробуйте добавить android:descendantFocusability = "blocksDescendants в корневой макет вашего представления элементов. Надеюсь, это поможет!
@I_A_Mok сделает мой imageButton неактивным? извините, я понятия не имею о потомках. будет смотреть в это.
выяснил корень проблемы, я могу щелкнуть элемент, когда я пытаюсь щелкнуть за пределами просмотра карты. но когда я пытаюсь щелкнуть сам карточный просмотр, он не работает.
Добавьте convertView.setOnclickListener() в свой код. Попробуйте код ниже в своем адаптере
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(resourceLayout, parent, false);
}
TextView tt1 = (TextView) convertView.findViewById(R.id.field_name_textview);
TextView tt2 = (TextView) convertView.findViewById(R.id.field_value_textview);
ImageButton direction = (ImageButton) convertView.findViewById(R.id.direction);
tt1.setText(merchantLocatorarray.get(position).getTitle());
tt2.setText(merchantLocatorarray.get(position).getAddress());
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();
}
});
return convertView;
} }
@stackoverflowlawrence, попробуйте отладить
Попробуйте использовать Наблюдаемый в собственном адаптере:
// Define
private final PublishSubject<MerchantLocatorResponse> onItemClick = PublishSubject.create();
// Create the observable method
public Observable<ConversationMessage> getObservable(){
return onItemClick;
}
// Set the onClickListener into getView()
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick.onNext(merchantLocatorarray.get(position));
}
});
Затем в своей основной деятельности слушайте его и обрабатывайте щелчок:
@OnClick(R.id.fab)
public void showAccToDialog() {
// bla bla bla
listViewBillers.setAdapter(adapter);
listViewBillers.getObservable().subscribe(geoLocate);
// bla bla bla
}
Consumer<MerchantLocatorResponse> geoLocate = new Consumer<MerchantLocatorResponse>() {
@Override
public void accept(MerchantLocatorResponse mlr) {
// Code after click event
}
};
Добавьте эту библиотеку в свой градиент:
implementation "io.reactivex.rxjava2:rxjava:2.1.5"
implementation "io.reactivex.rxjava2:rxandroid:2.0.1"
Сам setOnclickListener не работает. я не могу щелкнуть по моему представлению. :(
Попробуйте установить android:clicable = "true" и android:focusable = "true" в родительском макете в resourceLayout
Проверить ответ