У меня есть ListView в моем приложении. Ниже мой MainActivityНажмите только одну строку ListView за один раз в Android
public class MainActivity extends Activity{
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] wrongOrder = new String[] {"Am/I/Girl/Good","Ila/Is/Name/My","Barking/Dog/Is"};
String[] rightOrder = new String[]{"I/Am/Good/Girl","My/Name/Is/Ila","Dog/Is/Barking"};
DashboardListAdapter codeLearnArrayAdapter = new DashboardListAdapter(this,0, wrongOrder,rightOrder);// new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, codeLearnChapters);
listView = (ListView)findViewById(R.id.listView1);
listView.setAdapter(codeLearnArrayAdapter);
}
}
В моем классе адаптера я создал два LinearLayout, в одном макете есть четыре кнопки со случайными данными «Am», «Я», «Хорошо», «Девочка», который я прохожу от Основная активность и другая компоновка чуть ниже указанной компоновки с таким же количеством кнопок, и поместите их в родительский. Относительный макет для рисования одной строки. Теперь, когда я дважды нажимаю на кнопку над макетом, тогда данные сравниваются с rightOrder String [], которые я перехожу из MainActivity в Adapter и занимаю подходящую позицию. Все работает отлично, но моя задача в первый раз, когда кнопки первой строки можно щелкнуть, другие строки не сфокусированы, а когда я выполняю задачу первой строки, то кнопки второй строки сфокусированы, а первая и другие строки не сфокусированы. Мой класс адаптера:
public class DashboardListAdapter extends ArrayAdapter<String>{
Button clickedBtn;
private int mLayout;
private Activity mContext;
private String[] listArray;
String[] rightArray;
Button[][] btnArray;
int[] indexArray;
private int mLastPosition = -1;
static int id = 1000;
static int id1 = 5000;
LinearLayout innerLayout2;
LinearLayout innerLayout1;
static int innerLayoutTag = 778;
static boolean flag = false;
public DashboardListAdapter(Activity context, int resource,
String[] lsitArray,String[] rightArray) {
super(context, resource);
this.mContext = context;
this.listArray = lsitArray;
this.rightArray = rightArray;
this.btnArray = new Button[listArray.length][];
this.indexArray = new int[listArray.length];
this.setLayout(resource);
}
@Override
public int getCount()
{
return listArray.length;
}
@Override
public long getItemId(int position)
{
return position;
}
/**
* @return the layout
*/
public int getLayout()
{
return mLayout;
}
/**
* @param layout
* the layout to set
*/
public void setLayout(int layout)
{
this.mLayout = layout;
}
/**
* @return the context
*/
public Activity getContext()
{
return mContext;
}
/**
* @param context
* the context to set
*/
public void setContext(Activity context)
{
this.mContext = context;
}
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null) {
RelativeLayout layout = new RelativeLayout(mContext);
String content = null;
content = listArray[position];
List<String> list = new ArrayList<String>(Arrays.asList(content.split("/")));
innerLayout1 = new LinearLayout(mContext);
innerLayout1.setId(100);
innerLayout2 = new LinearLayout(mContext);
Button[] rowBtnArray = new Button[list.size()];
for(int i=0; i<list.size(); i++)
{
Button btn = new Button(mContext);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
btn.setLayoutParams(p);
btn.setText(list.get(i));
btn.setId(id++);
btn.setTag(i);
innerLayout1.addView(btn);
innerLayout1.setTag(position);
Button btnNew = new Button(mContext);
RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
btnNew.setLayoutParams(p1);
btnNew.setText("hello");
btnNew.setId(id1++);
innerLayout2.addView(btnNew);
rowBtnArray[i] = btnNew;
btn.setOnTouchListener(new OnTouchListener() {
@SuppressWarnings("deprecation")
GestureDetector gestureDetector = new GestureDetector(new MyGestureDetector(mContext));
@Override
public boolean onTouch(View v, MotionEvent event) {
clickedBtn = (Button)v;
return gestureDetector.onTouchEvent(event);
}
});
}
btnArray[position] = rowBtnArray;
RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
p1.addRule(RelativeLayout.BELOW,innerLayout1.getId());
innerLayout2.setLayoutParams(p1);
innerLayout2.setTag(innerLayoutTag);
layout.addView(innerLayout1);
layout.addView(innerLayout2);
convertView = layout; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT
}
else
{
}
return convertView;
}
public class MyGestureDetector extends SimpleOnGestureListener {
public Context context;
public String phno;
public MyGestureDetector(Context con)
{
this.context=con;
}
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
System.out.println("in Double tap");
String str = (String) clickedBtn.getText();
LinearLayout rowLayout = (LinearLayout)clickedBtn.getParent();
int rowNum = (int) rowLayout.getTag();
String content = rightArray[rowNum];
List<String> list = new ArrayList<String>(Arrays.asList(content.split("/")));
Button[] rowBtn = btnArray[rowNum];
for(int j=0; j<list.size(); j++)
{
String text = list.get(j);
if(text.equalsIgnoreCase(str))
{
int index = indexArray[rowNum];
if(index == j)
{
Button btn = rowBtn[j];
btn.setVisibility(View.VISIBLE);
btn.setText(str);
index+=1;
indexArray[rowNum] = index;
}
else
{
Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(400);
}
}
}
return true;
}
}
}
Я создал схему программно без надувания.
На самом деле я хочу, чтобы при запуске приложения первая строка была нажата, а другие строки отключены, и когда я выполняю полную операцию с первой строкой, тогда управление переходит ко второй строке, а первая строка и остальные строки отключены, за исключением второго. Если вы также можете опубликовать код, это будет большой помощью. – yenu
@yenu Посмотрите на обновление –
Я уже делаю это, но я не получаю правильный результат. Просьба также опубликовать эту информацию. Благодарю. И еще одна вещь, когда я выполняю задачу первой строки, а затем вторую строку, то как используется метод isEnabled. – yenu