Возможно, это будет помечено как дубликат, но я просмотрел все посты, связанные с моей проблемой, и никто из них не исправил их, поэтому я пишу свой пост, чтобы посмотреть, сможет ли кто-нибудь конкретно помочьменя.
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я ищу что-то в моем списке, положение нарушается.Поэтому, если у меня есть представление списка AA, BB, CC, AB, и я ищу A, он вернет AA, AB, как и положено, но если я нажму на AB, это даст мне BB, так как AB сейчас в позиции1 вместо 3. Как я могу получить исходные позиции моих данных для моего слушателя onclick?Спасибо.
Вот мой пользовательский класс просмотра списка:
public class CustomListViewClass {
// Store the id of the movie poster
private String mEquation;
// Store the name of the movie
public String mName;
public int previousPosition;
// Constructor that is used to create an instance of the CustomListViewClass object
public CustomListViewClass(String mName, String mEquation) {
this.mEquation = mEquation;
this.mName = mName;
}
public String getmEquation() {
return mEquation;
}
public void setmEquation(String mEquation) {
this.mEquation = mEquation;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
}
Мой пользовательский адаптер просмотра списка:
public class CustomListviewAdapter extends ArrayAdapter<CustomListViewClass> implements Filterable {
//Define list items
TextView textView;
TextView formula_two;
//Define list
private Context mContext;
private List<CustomListViewClass> moviesList = new ArrayList<>();
private List<CustomListViewClass> moviesListFiltered = new ArrayList<>();
private int layoutResource;
public CustomListviewAdapter(@NonNull Context context, @LayoutRes ArrayList<CustomListViewClass> list) {
super(context, 0 , list);
mContext = context;
moviesList = list;
moviesListFiltered = list;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItem = convertView;
if(listItem == null)
listItem = LayoutInflater.from(mContext).inflate(R.layout.row_layout,parent,false);
CustomListViewClass currentMovie = moviesListFiltered.get(position);
textView = (TextView) listItem.findViewById(R.id.textView);
textView.setText(currentMovie.getmName());
TextView equation = (TextView) listItem.findViewById(R.id.formula_one);
equation.setText(currentMovie.getmEquation());
return listItem;
}
int previousPosition;
public int getPreviousPosition() {
return previousPosition;
}
public void setPreviousPosition(int previousPosition) {
this.previousPosition = previousPosition;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return moviesListFiltered.size();
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
//no constraint given, just return all the data. (no search)
results.count = moviesList.size();
results.values = moviesList;
} else {//do the search
List<CustomListViewClass> resultsData = new ArrayList<>();
String searchStr = constraint.toString().toUpperCase();
for (CustomListViewClass o : moviesListFiltered)
if (o.mName.toUpperCase().startsWith(searchStr)) resultsData.add(o);
results.count = resultsData.size();
results.values = resultsData;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
moviesListFiltered = (ArrayList<CustomListViewClass>) results.values;
notifyDataSetChanged();
}
};
}
}
И мой основной фрагмент
public class MainEquations extends ListFragment {
private ListView listView; //Main listview
private CustomListviewAdapter mAdapter; //Custom adapter for listview
private AlertDialog.Builder builder;
public static final String TAG = MainEquations.class.getSimpleName();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_equations, container, false);
setHasOptionsMenu(true);
//Find listview in xml
listView = (ListView) view.findViewById(R.id.listView);
ArrayList<CustomListViewClass> equationsList = new ArrayList<>();
//Populate listview with items
equationsList.add(new CustomListViewClass( "Ampere's Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Angular Acceleration" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Angular Velocity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Belt Velocity" , "V = (πdₘnₘ)/12"));
equationsList.add(new CustomListViewClass( "Bolt Stress Area" , "A = π/4(dₙ - 0.9743/n)²"));
equationsList.add(new CustomListViewClass( "Brake Clamp Load" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Buoyant Force" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Conductivity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Coulomb's Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Darcy's Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Density" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Drag Force" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Dynamic Viscosity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Elastic Potential Energy" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Electric Field" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Engineering Strain" , "ε = ΔL/L₀"));
equationsList.add(new CustomListViewClass( "Engineering Stress" , "σ = F/A₀"));
equationsList.add(new CustomListViewClass( "Escape Velocity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Flow Head Loss" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Fluid Pressure" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Fluid Surface Tension" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Force" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Fracture Toughness" , "Kᵢc = Yσ⋅Sqrt(πa)"));
equationsList.add(new CustomListViewClass( "Gauss Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Gibb's Free Energy" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Gravitational Force" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Gravitational Potential Energy" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Horsepower using Belt Velocity/Force" , "HP = (Fb⋅Vb)/33000"));
equationsList.add(new CustomListViewClass( "Ideal Gas Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Induced Voltage" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Kinematic Viscosity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Kinetic Energy" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Mach Number" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Magnetic Force Charge" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Moment" , "F⋅d"));
equationsList.add(new CustomListViewClass( "Momentum" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Nernst Equation" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Ohms Law" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Open Channel Water Flow" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Orbital Velocity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Orifice Discharge" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Pump Power" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Refraction" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Resistivity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Resonant Frequency" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Reynolds Number" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Rotational Kinetic Energy" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Shear Modulus" , "G = τ/γ"));
equationsList.add(new CustomListViewClass( "Shear Strain" , "γ = τ/G"));
equationsList.add(new CustomListViewClass( "Shear Stress" , "τ = F/A"));
equationsList.add(new CustomListViewClass( "Shear Stress of Linear Helical Spring" , "τ = Kₛ(8FD/πd³)"));
equationsList.add(new CustomListViewClass( "Surface Charge Density" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Thermal Deformation" , "δₜ = αL(T - T₀)"));
equationsList.add(new CustomListViewClass( "Torque" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Velocity" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Voltage Divider" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Voltage Drop" , "Placeholder"));
equationsList.add(new CustomListViewClass( "Young's Modulus" , "E = σ/ε"));
mAdapter = new CustomListviewAdapter(getActivity(),equationsList);
listView.setAdapter(mAdapter);
//Set onClick functions for listview
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1,
int position, long arg3) {
switch(position) {
case 15:
setVariables("Engineering Strain",
"<center>$$\\epsilon = \\frac{\\Delta L}{L_0}$$</center>",
"\\(Unitless\\)",
"\\(\\Delta L = \\mathrm{change~in~length~in~}in, mm\\)",
"\\(L_0 = \\mathrm{original~area~in~}in, mm\\)");
break;
case 16:
setVariables("Engineering Stress",
"<center>$$\\sigma = \\frac{F}{A_0}$$</center>",
"\\(Pa, MPa, psi, kpsi\\)",
"\\(F = \\mathrm{axial~force~in~}N, kip\\)",
"\\(A_0 = \\mathrm{cross~sectional~area~in~} m^2, ft^2\\)");
break;
case 2:
setVariables("Moment",
"<center>$$M= F{\\cdot}d$$</center>",
"\\(lb{\\cdot}ft, N{\\cdot}m\\)",
"\\(F = \\mathrm{force~in~}N, lb\\)",
"\\(d = \\mathrm{distance~of~radial~arm~in~} m, ft\\)");
break;
case 3:
setVariables("Shear Stress",
"<center>$$\\epsilon = \\frac{\\Delta L}{L_0}$$</center>",
"\\(Unitless\\)",
"\\(\\Delta L = \\mathrm{change~in~length~in~}in, mm\\)",
"\\(L_0 = \\mathrm{original~area~in~}in, mm\\)");
break;
}
}
});
return view;
}
public void setVariables(String title, String equation, String units, String variable_one, String variable_two) {
Bundle info = new Bundle();
info.putString("KEY_TITLE", title);
info.putString("KEY_EQUATION", equation);
info.putString("KEY_UNITS", units);
info.putString("KEY_VARIABLES_ONE", variable_one);
info.putString("KEY_VARIABLES_TWO", variable_two);
FragmentManager fm = getActivity().getFragmentManager();
CustomEquationsDialog dialog = new CustomEquationsDialog();
dialog.setArguments(info);
dialog.show(fm, TAG);
}
//Alert function for dialog
public void alert (String title, String message) {
builder = new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Light_Dialog);
builder.setTitle(title)
.setMessage(message)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.show();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
//Stuff
}
//Options menu created
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_equations, menu);
super.onCreateOptionsMenu(menu,inflater);
final SearchView searchView2 = (SearchView) menu.findItem(R.id.item_search).getActionView();
searchView2.setIconifiedByDefault(false);
searchView2.setQueryHint("Search Here");
searchView2.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
Filter filter = mAdapter.getFilter();
if (TextUtils.isEmpty(newText)) {
listView.clearTextFilter();
filter.filter(newText);
} else {
filter.filter(newText);
listView.setFilterText(newText);
}
mAdapter.notifyDataSetChanged();
return true;
}
public boolean onQueryTextSubmit(String query) {
searchView2.clearFocus(); //Close searchview when enter button pressed
return true;
}
});
}
}