Я создаю мобильное приложение для планшетов и добавил Основной / подробный поток , используя шаги Android Studio. Я заметил, что когда вы выбираете элемент, элемент не выделяется , пользователь не может понять, к какому элементу он прикоснулся.
Я провел исследование и не нашел ничего, что мне помогло. Все предложения касаются ListView и в моем случае используйте RecyclerView .
Я попытался хотя бы изменить цвет фона внутри метода onClick, и он работает, но цвет не исчезает при прикосновении к другому элементу.
ProductListActivity:
public class ProductListActivity extends AppCompatActivity {
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
private boolean mTwoPane;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle(getTitle());
if (findViewById(R.id.product_detail_container) != null) {
// The detail container view will be present only in the
// large-screen layouts (res/values-w900dp).
// If this view is present, then the
// activity should be in two-pane mode.
mTwoPane = true;
}
View recyclerView = findViewById(R.id.product_list);
assert recyclerView != null;
setupRecyclerView((RecyclerView) recyclerView);
}
private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(this, DummyContent.ITEMS, mTwoPane));
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
}
public static class SimpleItemRecyclerViewAdapter
extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> {
private final ProductListActivity mParentActivity;
private final List<DummyContent.DummyItem> mValues;
private final boolean mTwoPane;
private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
DummyContent.DummyItem item = (DummyContent.DummyItem) view.getTag();
if (mTwoPane) {
Bundle arguments = new Bundle();
arguments.putString(ProductDetailFragment.ARG_ITEM_ID, item.id);
ProductDetailFragment fragment = new ProductDetailFragment();
fragment.setArguments(arguments);
mParentActivity.getSupportFragmentManager().beginTransaction()
.replace(R.id.product_detail_container, fragment)
.commit();
// Custom color for the selected item
view.setBackgroundColor(Color.GREEN);
} else {
Context context = view.getContext();
Intent intent = new Intent(context, ProductDetailActivity.class);
intent.putExtra(ProductDetailFragment.ARG_ITEM_ID, item.id);
context.startActivity(intent);
}
}
};
SimpleItemRecyclerViewAdapter(ProductListActivity parent,
List<DummyContent.DummyItem> items,
boolean twoPane) {
mValues = items;
mParentActivity = parent;
mTwoPane = twoPane;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.product_list_content, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mIdView.setText(mValues.get(position).id);
holder.mContentView.setText(mValues.get(position).content);
holder.itemView.setTag(mValues.get(position));
holder.itemView.setOnClickListener(mOnClickListener);
}
@Override
public int getItemCount() {
return mValues.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
final TextView mIdView;
final TextView mContentView;
ViewHolder(View view) {
super(view);
mIdView = (TextView) view.findViewById(R.id.id_text);
mContentView = (TextView) view.findViewById(R.id.content);
}
}
}
}
product_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:background="@drawable/border_all"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context=".activities.Inventory.ProductListActivity">
<!--
This layout is a two-pane layout for the Products
master/detail flow.
-->
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/product_list"
android:name="com.applab.nestlenido.activities.Inventory.ProductListFragment"
android:layout_width="@dimen/item_width"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager"
tools:context="com.applab.nestlenido.activities.Inventory.ProductListActivity"
tools:listitem="@layout/product_list_content" />
<FrameLayout
android:id="@+id/product_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
Моя цель - изменить цвет фона выбранного элемента . Если вы дотронетесь до другого элемента, предыдущий элемент не должен иметь фона, а новый элемент должен теперь иметь фон (нормальное поведение).