我在片段上有一个简单的按钮,按钮声明很好,但是当我按下应用程序上的按钮时,没有任何事情发生。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Log.i(TAG, "onCreate");
View rootView = inflater.inflate(R.layout.activity_cliente, container, false);
metIP = (EditText) rootView.findViewById(R.id.etIP);
mtvRespuesta = (TextView) rootView.findViewById(R.id.tvRespuesta);
mbtConectar = (Button) rootView.findViewById(R.id.btConectar);
metPuerto = (EditText) rootView.findViewById(R.id.etPuerto);
// contexto de la aplicacion
cont = super.getActivity().getApplicationContext();
// connectivityManager
myConnManager = (ConnectivityManager) super.getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
// broadcastReceiver de las conexiones WiFi, registro del mismo dentro
// de la aplicacion
BroadcastReceiverWifi brwifi = new BroadcastReceiverWifi(this,
myConnManager);
super.getActivity().registerReceiver(brwifi.myWifiReciever, new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION));
mbtConectar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG,"dentro de onClick");
eventoConectar(v);
}
});
return rootView;
}
完整的xml代码,声明按钮。名为activity_cliente.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TableLayout
android:id="@+id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.daviddiez.clientearduinotab.ClienteActivity" >
<!-- fila para campo de IP con su etiqueta -->
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvIP"
android:layout_width="30dp"
android:fontFamily="sans-serif-condensed"
android:gravity="left"
android:text="@string/tvIP"
android:textColor="#1534e3"
android:textSize="22sp"/>
<EditText
android:id="@+id/etIP"
android:layout_width="150dp"
android:fontFamily="sans-serif-condensed"
android:gravity="left"
android:hint="dir ip"
android:inputType="text"
android:singleLine="true"
android:textColor="#008caf"
android:textSize="20sp" />
</TableRow>
<!-- fila para el puerto -->
<TableRow
android:id="@+id/tableRowPuerto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvPuerto"
android:layout_width="40dp"
android:fontFamily="sans-serif-condensed"
android:gravity="left"
android:text="Puerto"
android:textColor="#1534e3"
android:textSize="22sp" />
<EditText
android:id="@+id/etPuerto"
android:layout_width="60dp"
android:fontFamily="sans-serif-condensed"
android:gravity="start"
android:hint="puerto"
android:inputType="number"
android:singleLine="true"
android:textColor="#008caf"
android:textSize="20sp" />
</TableRow>
<!-- fila para el boton conectar -->
<TableRow
android:id="@+id/tableRowConectar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right" >
<!--
se requiere un frameLayout para poder redimensionar el boton y posicionarlo donde
se desea, ya que el tableRow bloquea estos aspectos.
-->
<Button
android:id="@+id/btConectar"
android:layout_width="135dp"
android:layout_height="45dp"
android:layout_gravity="end"
android:background="@drawable/shapebutton"
android:fontFamily="sans-serif-condensed"
android:text="@string/btConectar"
android:textColor="#FFFFFF"
android:textSize="18sp"
/>
</TableRow>
<!-- fila para la respuesta del servidor cuando conecta -->
<TableRow
android:id="@+id/tableRowRespuesta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left" >
<TextView
android:id="@+id/tvRespuesta"
android:layout_width="120dp"
android:fontFamily="sans-serif-condensed"
android:gravity="left"
android:textColor="#009688"
android:textSize="20sp" />
</TableRow>`</TableLayout> </RelativeLayout>`
当我按下按钮时,这是logcat输出:
12-21 21:32:16.628 29269-29269/com.example.daviddiez.clientearduinotab D/GestureDetector: [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 2 mFalseSizeCnt:0
按钮应调用的方法:
public void eventoConectar(View v){
Log.i(TAG,"eventoConectar");
String port = metPuerto.getText().toString();
puerto = Integer.parseInt(port);
ip = metIP.getText().toString();
SavePrefs sp = new SavePrefs();
sp.guardarPreferencias(ip, puerto, super.getActivity());
WifiManager mWifiManager = (WifiManager) super.getActivity().getSystemService(Context.WIFI_SERVICE);
status = mWifiManager.isWifiEnabled();
vista = v;
Log.i(TAG, "status wifi " + status);
cas = new ConnectAndroidServer(ip, puerto, cont,ClienteActivity.this);
cas.delegate = this;
if (status == false) {//si el status de conexion es falso, se le pregunta al usuario si desea activar la wifi,
//salir, o no activar.
mostrarDialog(vista, " necesita Activar la conexion WiFi",
"Salir");
} else {
cas.execute();
Log.i(TAG, "lanzado AsyncTask");
primerConexion=true;
}
new ProgramadorConexion(ClienteActivity.this);
}
左边第一个片段的屏幕截图和左边第二个片段的屏幕截图:
选项卡式窗格用于显示不同的视图。
public class TabActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
ClienteActivity clienteActivity;
private static final String TAG="1-TabActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setPageTransformer(true,new ZoomOutPageTransformer());
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_tab, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_SECTION_NUMBER = "section_number";
public PlaceholderFragment() {
}
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(TAG,"onCreateView");
View rootView = inflater.inflate(R.layout.activity_cliente, container, false);
//TextView textView = (TextView) rootView.findViewById(R.id.section_label);
//textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
return rootView;
}
}
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Log.i(TAG,"getItem position"+position);
switch (position){
case 0:
Log.i(TAG,"getItem case 0");
return PlaceholderFragment.newInstance(position + 1);
//return PlaceholderFragment.newInstance(position + 1);
case 1:
Log.i(TAG,"getItem case 1");
//ClienteActivity ca=new ClienteActivity();
SwitchingActivity sa2=new SwitchingActivity();
//return PlaceholderFragment.newInstance(position + 1);
return sa2;
case 2:
Log.i(TAG,"getItem case 2");
SwitchingActivity sa=new SwitchingActivity();
return sa;
}
//
return null;
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Servidor";
case 1:
return "Control";
case 2:
return "SECTION 3";
}
return null;
}
}
}
答案 0 :(得分:0)
为什么使用?:
super.getActivity().findViewById(R.id.btConectar);
将其替换为:
rootView.findViewById(R.id.btConectar);
答案 1 :(得分:0)
好吧,在找到按钮失败的原因后,我发现:我必须在getItem()方法中填充片段。 改变这部分代码:
@Override
public Fragment getItem(int position) {
Log.i(TAG,"getItem position"+position);
switch (position){
case 0:
Log.i(TAG,"getItem case 0");
return PlaceholderFragment.newInstance(position + 1);
//return PlaceholderFragment.newInstance(position + 1);
case 1:
Log.i(TAG,"getItem case 1");
//ClienteActivity ca=new ClienteActivity();
SwitchingActivity sa2=new SwitchingActivity();
//return PlaceholderFragment.newInstance(position + 1);
return sa2;
case 2:
Log.i(TAG,"getItem case 2");
SwitchingActivity sa=new SwitchingActivity();
return sa;
}
//
return null;
}
为此:
@Override
public Fragment getItem(int position) {
Log.i(TAG,"getItem position"+position);
switch (position){
case 0:
Log.i(TAG,"getItem case 0");
ClienteActivity ca=new ClienteActivity();
return ca;
case 1:
Log.i(TAG,"getItem case 1");
SwitchingActivity sa2=new SwitchingActivity();
return sa2;
case 2:
Log.i(TAG,"getItem case 2");
SwitchingActivity sa=new SwitchingActivity();
return sa;
}
//
return null;
}
更改按钮,其他一切都完美无缺。 感谢@ cricket_007和其他人的帮助。